gpt4 book ai didi

c# - 绑定(bind)到 Canvas

转载 作者:行者123 更新时间:2023-11-30 16:33:29 24 4
gpt4 key购买 nike

我的类中有一个 Canvas 属性,我想知道是否可以将它绑定(bind)到 xaml 中的 Canvas ?

Canvas 中的数据绑定(bind)如何工作?

<Canvas ItemSource="{Binding ClassCanvas}" />

最佳答案

如果您希望在 XAML 中定义的 Canvas 将整个 Canvas 作为单个项目包含在您的类中,您可以编写:

<Canvas>
<ContentPresenter Content="{Binding ClassCanvas}" />
... other items here ...
</Canvas>

如果您希望在 XAML 中定义的 Canvas 包含与类中定义的 Canvas 相同的所有 UIElement,这是不可能的,因为 UIElement 只能有一个 UIElement 父级。因此,如果类中定义的 Canvas 是给定 UIElement 的父级,则 XAML 中定义的 Canvas 不能是。

如果您希望 Canvas 显示您类中定义的 Canvas 中每个 UIElement 的数据,您可以使用带有 Canvas 面板和 DataTemplate 的 ItemsControl 来实现:

<ItemsControl ItemsSource="{Binding ClassCanvas.Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl>
<ItemsControl.ItemsContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" />
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
... display of UIElement here, either using VisualBrush or custom display
</ControlTemplate>
<Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemsContainerStyle>
</ItemsControl>

请注意,此代码只会扫描一次 Children 属性,因为它不是 INotifyCollectionChanged 集合。

如果您想绑定(bind)到您的类中的一个属性,该属性包含一组设置了 Canvas.Top 和 Canvas.Left 属性的 UIElement,如果容器是 ObservableCollection 而不是 Canvas,您可以轻松地做到这一点。

Canvas 类从未设计用于您的数据层。我强烈建议您改用 ObservableCollection 并仅将 Canvas 用作 View 的一部分。

关于c# - 绑定(bind)到 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135438/

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