【问题标题】:How to display items in Canvas through Binding如何通过 Binding 在 Canvas 中显示项目
【发布时间】:2011-11-02 21:28:31
【问题描述】:

我有想要使用数据绑定在 Canvas 中显示的项目列表。

ItemsToShowInCanvas = new ObservableCollection<ItemDetail>
   {
       new ItemDetail {Text = "ABC", Top = 10, Left = 200},
       new ItemDetail {Text = "DEF", Top = 100, Left = 300},
       new ItemDetail {Text = "PQR", Top = 50, Left = 150}
   };

ItemDetail 是一个简单的类,具有 Text、Top 和 Left 值的自动属性

public class ItemDetail
{
    public string Text { get; set; }
    public double Top { get; set; }
    public double Left { get; set; }
}

当我对项目进行数据绑定时,它们确实出现在画布中。但是这些项目不会出现在使用 Top 和 Left 属性提到的位置。

<Canvas>
    <ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Text}" Canvas.Top="{Binding Path=Top}" Canvas.Left="{Binding Path=Left}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Canvas>

【问题讨论】:

标签: c# wpf xaml data-binding wpf-controls


【解决方案1】:

ItemsPanel 设置为Canvas 并绑定容器而不是DataTemplate 中的TextBlock

<ItemsControl ItemsSource="{Binding Path=ItemsToShowInCanvas}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding Left}"/>
            <Setter Property="Canvas.Top" Value="{Binding Top}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Text}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

【讨论】:

  • 如果我有一个Shape 而不是TextBlock,我可以简单地用另一个替换一个吗?
  • 另外,ItemsControl 驻留在文档树的什么位置?
  • ItemsControl.ItemsContainerStyle 正是我所需要的,我让其余的工作。非常感谢。
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 2012-04-28
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多