从ItemsControl派生的WPF自定义控件无法显示绑定数据
我创建了一个名为MovableItemsControl的自定义控件,该控件继承自ItemsControl,以便重写GetContainerForItemOverride()方法。我的问题是绑定集合中没有任何对象显示。目前,我正在绑定到一个OberservableCollection的字符串,当我查看调试器时,我可以看到它们在ItemsSource中 自定义控件如下所示:从ItemsControl派生的WPF自定义控件无法显示绑定数据,wpf,wpf-controls,binding,Wpf,Wpf Controls,Binding,我创建了一个名为MovableItemsControl的自定义控件,该控件继承自ItemsControl,以便重写GetContainerForItemOverride()方法。我的问题是绑定集合中没有任何对象显示。目前,我正在绑定到一个OberservableCollection的字符串,当我查看调试器时,我可以看到它们在ItemsSource中 自定义控件如下所示: public class MovableItemsControl : ItemsControl { static Mo
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;
}
}
公共类MovableItemsControl:ItemsControl
{
静态MovableItemsControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MovableItemsControl),new FrameworkPropertyMetadata(typeof(MovableItemsControl));
}
///
///将添加到ItemsControl的每个内容对象包装到NodeWrapper中
///
受保护的覆盖依赖对象GetContainerForItemOverride()
{
NodeWrapper NodeWrapper=新的NodeWrapper();
返回nodeWrapper;
}
受保护的覆盖布尔IsItemItsOwnContainerOverride(对象项)
{
退货项目为NodeWrapper;
}
}
NodeWrapper是一个UserControl,由一个派生自Thumb(MoveThumb)的自定义控件和一个标签(该标签仅用于测试)组成
是否已在包含控件的项目的Generic.xaml文件中使用ControlTemplate为MoveableItems控件创建了默认样式?如果不是,则控件加载时将没有任何可渲染的内容 更新
ItemsControl的ControlTemplate需要包含ItemsPresenter作为要注入的项的占位符(类似于ContentControl的ContentPresenter)。您当前的模板只有一个空边框。我认为您的样式控制模板边框中也缺少一个:
a) 项目演示者(如
)或b) IsItemsHost设置为true的窗格(例如
)我创建了一个默认样式。我把它编辑成我的问题:
<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>