[英]Access a Canvas inside an ItemsSource in a UserControl, from the MainPage
我有一个FlipView
在我MainPage
。 这是ItemTemplate
绑定到名为landscapeControl
的UserControl
。 它的ItemsSource
绑定到名为MyLandscape
的类的List。
landscapeControl:
<Grid>
<ScrollViewer x:Name="LScrollViewer" MaxZoomFactor="2.0" MinZoomFactor="1.0" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" DoubleTapped="LScrollViewer_DoubleTapped" >
<Canvas x:Name="inkCanvas" Background="Transparent">
<StackPanel x:Name="LStackPanel" Orientation="Horizontal" Margin="0,0,0,0">
<Image x:Name="LImage0" HorizontalAlignment="Right" Source="{Binding firstImage}" Width="570"/>
<Image x:Name="LImage1" HorizontalAlignment="Left" Source="{Binding nextImage}" Width="570"/>
</StackPanel>
</Canvas>
</ScrollViewer>
</Grid>
MyLandscape
类:
public class MyLandscape
{
public ImageSource firstImage { get; set; }
public ImageSource nextImage { get; set; }
public Canvas inkCanvas { get; set; }
}
我的图像完美呈现。 我只想要三件事:
1)我想从我的MainPage
访问我的Canvas
。 我试图在flipView_SelectionChanged
事件中执行此flipView_SelectionChanged
:
landscapeControl pc = flipView1.SelectedItem as landscapeControl;
if (flipView1.Items.Count > 0)
{
var myCanvas = pc.getCanvas();
m_CanvasManager = new CanvasManager(myCanvas);
}
但是pc变量总是为空! 我想绑定我的Canvas
,所以每两个图像都有一个Canvas
? 那可能吗?
一种方法是使用Command
将UIElement
传递回模型。
基本上你的inkCanvas
元素将附加一个像这样的CanvasLoadedCommand
。 请注意,只有在完全加载inkCanvas
时才会调用此命令。
<Canvas x:Name="inkCanvas" Background="Transparent">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior>
<Core:InvokeCommandAction Command="{Binding CanvasLoadedCommand}" CommandParameter="{Binding ElementName=inkCanvas}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
我在这里为这个小演示 (工作源代码)创建了一个简单的DelegateCommand
。 加载inkCanvas
this.inkCanvas =(画布)画布;
将被调用,然后将填充inkCanvas
属性。
private DelegateCommand _canvasLoadedCommand;
public DelegateCommand CanvasLoadedCommand
{
get
{
if (_canvasLoadedCommand == null)
{
_canvasLoadedCommand = new DelegateCommand((canvas) =>
{
this.inkCanvas = (Canvas)canvas;
},
(canvas) => canvas != null);
}
return _canvasLoadedCommand;
}
}
希望这可以帮助!
更改您的代码:
if (flipView1.Items.Count > 0) {
var myCanvas = pc.getCanvas();
m_CanvasManager = new CanvasManager(myCanvas);
}
至
if (e.AddedItems.Count > 0) {
var myCanvas = (e.AddedItems[0] as LandscapeControl).getCanvas();
m_CanvasManager = new CanvasManager(myCanvas);
}
好了,经过长时间的搜寻,在以后Windows Store Apps
:我们不能访问一个Canvas
,这是一个内部FlipView
,或者如果它是直接在里面FlipView
或DataTemplate
的的FlipView
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.