gpt4 book ai didi

从 ItemsControl 派生的 WPF 自定义控件无法显示绑定(bind)数据

转载 作者:行者123 更新时间:2023-12-04 14:08:23 25 4
gpt4 key购买 nike

我创建了一个名为 MovableItemsControl 的自定义控件,它继承自 ItemsControl,以覆盖 GetContainerForItemOverride() 方法。我的问题是绑定(bind)集合中的所有对象都没有显示。目前,我正在绑定(bind)到字符串的 OberservableCollection,当我查看调试器时,我可以看到它们位于 ItemsSource 中。

自定义控件如下图:

public class MovableItemsControl : ItemsControl
{
static MovableItemsControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MovableItemsControl), new FrameworkPropertyMetadata(typeof(MovableItemsControl)));
}

/// <summary>
/// Wraps each content object added to the ItemsControl in a NodeWrapper
/// </summary>
protected override DependencyObject GetContainerForItemOverride()
{
NodeWrapper nodeWrapper = new NodeWrapper();
return nodeWrapper;
}

protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is NodeWrapper;
}
}

NodeWrapper 是一个 UserControl,由一个从 Thumb (MoveThumb) 派生的自定义控件和一个 Label(Label 仅用于测试)组成。

    <Style TargetType="{x:Type local:MovableItemsControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MovableItemsControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

最佳答案

您是否在包含控件的项目的 Generic.xaml 文件中使用 ControlTemplate 为 MoveableItemsControl 创建了默认样式?如果不是,则控件在加载时不会呈现任何内容。

更新
ItemsControl 的 ControlTemplate 需要包含 ItemsPresenter 作为要注入(inject)的项目的占位符(类似于 ContentControl 的 ContentPresenter)。您当前的模板只有一个空边框。

关于从 ItemsControl 派生的 WPF 自定义控件无法显示绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254976/

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