gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:13:23 26 4
gpt4 key购买 nike

我正在使用 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/

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