gpt4 book ai didi

c# - 从 MainPage 访问 UserControl 中 ItemsSource 内的 Canvas

转载 作者:太空狗 更新时间:2023-10-29 23:44:54 25 4
gpt4 key购买 nike

我的 MainPage 中有一个 FlipView。它是 ItemTemplate 绑定(bind)到名为 landscapeControlUserControl。它的 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?那可能吗?

最佳答案

一种方法是使用 CommandUIElement 传递回您的模型。

基本上,您的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com