gpt4 book ai didi

wpf - 在 ItemsControl 中避免 ContentPresenter

转载 作者:行者123 更新时间:2023-12-04 18:23:51 31 4
gpt4 key购买 nike

有没有办法避免生成 ContentPresenterItemsControl包裹我的元素?我的 ItemsControl绑定(bind)到 VM 属性,我正在使用 DataTemplate在我的 ItemControl 的资源(没有 x:Key )中自定义我的集合对象的外观。这一切都很好,但是通过 Snoop 检查显示我所有的集合对象都包含在 ContentPresenter 中s 而不是直接添加到面板中。这个事实给我带来了一些其他问题。有没有办法避免额外的包装?

这是 XAML:

<ItemsControl ItemsSource="{Binding Path=Children}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type vm:Ellipse}">
<Ellipse Fill="{Binding Fill}" Stroke="{Binding Stroke}" />
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Focusable="true" Margin="10" FocusVisualStyle="{x:Null}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding XLoc}" />
<Setter Property="Canvas.Top" Value="{Binding YLoc}" />
<Setter Property="Canvas.ZIndex" Value="{Binding ZOrder}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>

最佳答案

您可以创建一个派生的 ItemsControl 并覆盖它的 GetContainerForItemOverride方法:

public class MyItemsControl : ItemsControl
{
protected override DependencyObject GetContainerForItemOverride()
{
return new Ellipse();
}
}

您的 ItemsControl XAML 不会设置 ItemTemplate没有了,有一个 ItemContainerStyle直接针对椭圆:
<local:MyItemsControl ItemsSource="{Binding Items}">
<local:MyItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</local:MyItemsControl.ItemsPanel>
<local:MyItemsControl.ItemContainerStyle>
<Style TargetType="Ellipse">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="100"/>
<Setter Property="Fill" Value="{Binding Fill}"/>
<Setter Property="Stroke" Value="{Binding Stroke}"/>
<Setter Property="Canvas.Left" Value="{Binding XLoc}"/>
<Setter Property="Canvas.Top" Value="{Binding YLoc}"/>
<Setter Property="Panel.ZIndex" Value="{Binding ZOrder}"/>
</Style>
</local:MyItemsControl.ItemContainerStyle>
</local:MyItemsControl>

请注意,为了绘制以 XLoc 和 YLoc 为中心的椭圆,您应该将 Ellipse 控件替换为带有 EllipseGeometry 的 Path。

关于wpf - 在 ItemsControl 中避免 ContentPresenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788384/

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