wpf - 当使用 ItemsControl ItemsControl.ItemsPanel 设置为 Canvas 时,ContenPresenter 会出现并破坏子项上的 Canvas 属性 [WPF]

标签 wpf canvas itemscontrol

我正在使用 ItemsControl,其中 ItemsPanel 设置为 Canvas(有关更多背景信息,请参阅 this 问题)。 ItemsControl 正在按我想要的方式执行,并且通过将子元素放入 ItemsControl.Items 来手动添加子元素时,它的工作方式就像一个魅力:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Items>
        <Button Canvas.Left="500" Content="Button Text" />
    </ItemsControl.Items>
</ItemsControl>

注意按钮上的 Canvas.Left 属性。这就像一个 super 按钮,按钮放置在距 ItemsControl 左侧 500 像素的位置。太棒了!

但是,当我定义绑定(bind)到列表的 ItemsSource 时,Canvas.left 没有任何效果:

<ItemsControl ItemsSource="{Binding Elements}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Canvas.Left="500" Content="Button Text" />
        </DataTemplate>     
    </ItemsControl.ItemTemplate>
</ItemsControl> 

通过在运行时检查应用程序,我发现了一个差异。容器 ContentPresenter 已添加到 Canvas 和按钮之间。

如何设置 ContentPresenter 本身的 Canvas.Left 属性?或者有其他方法可以解决这个问题吗?

谢谢大家!

最佳答案

可以使用 ItemContainerStyle 设置 Canvas.Left 属性:

<ItemsControl ItemsSource="{Binding Elements}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas IsItemsHost="True" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Content="Button Text" />
            </DataTemplate>     
        </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
        <Style>
             <Setter Property="Canvas.Left" Value="500" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

关于wpf - 当使用 ItemsControl ItemsControl.ItemsPanel 设置为 Canvas 时,ContenPresenter 会出现并破坏子项上的 Canvas 属性 [WPF],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415580/

相关文章:

列名中的 C# DataTable DataGrid 特殊字符 "/"(斜杠)

html - HTML5 视频上的容器( Canvas )

javascript - 饼图、条形图、线 : SVG/VML better than Canvas

c# - 文本文字中的 WPF 绑定(bind)

c# - 从 C# 代码生成包含触发器的 WPF 样式

c# - WCF 数据服务 GUI 性能和使用 ICollectionView 进行过滤

javascript - 当元素在其上设置动画时更改背景图像的不透明度

c# - 优秀的 Silverlight 自定义项目控件教程

c# - 为 Windows Phone 8 创建两列、垂直堆叠的列控件

wpf - 如何支持具有相同 View 模型的多个 View ?