我的 MainPage
中有一个 FlipView
。它是 ItemTemplate
绑定(bind)到名为 landscapeControl
的 UserControl
。它的 ItemsSource
绑定(bind)到名为 MyLandscape
的类的列表。
景观控制:
<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; }
}
我的图像显示完美。我只想要 3 样东西:
1) 我想从我的 MainPage
访问我的 Canvas
。我正在尝试在 flipView_SelectionChanged
事件中执行此操作:
landscapeControl pc = flipView1.SelectedItem as landscapeControl;
if (flipView1.Items.Count > 0)
{
var myCanvas = pc.getCanvas();
m_CanvasManager = new CanvasManager(myCanvas);
}
但是 pc 变量总是空的!我想绑定(bind)我的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>
我为这个小 demo 创建了一个简单的 DelegateCommand
(工作源代码)在这里。当加载 inkCanvas
时,
this.inkCanvas = (Canvas)canvas;
将被调用,然后填充 inkCanvas
属性。
private DelegateCommand _canvasLoadedCommand;
public DelegateCommand CanvasLoadedCommand
{
get
{
if (_canvasLoadedCommand == null)
{
_canvasLoadedCommand = new DelegateCommand((canvas) =>
{
this.inkCanvas = (Canvas)canvas;
},
(canvas) => canvas != null);
}
return _canvasLoadedCommand;
}
}
希望这对您有所帮助!
关于c# - 从 MainPage 访问 UserControl 中 ItemsSource 内的 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136886/