我在我的项目中使用了几个列表而不是树 - 用于正确的虚拟化(树结构中的许多项目)。 这些列表几乎相同。唯一的区别在于DataTemplates。那些列表有一些事件限制,我必须复制和放大在几个地方更新。当前事件用于:
我发现无法在资源字典中以单一样式绑定事件,因为事件必须属于特定类。所以我必须在类之间复制完全相同的事件并将它们绑定到特定列表。在XAML和代码中都有很多文本。
我想要做的是定义一个新的用户控件,从标准ListBox派生一切,但重写一些次要方法(而不是事件)。并且在我需要这样一个列表的地方重用这个控件,而不必复制所有事件。
问题是 - 它要求我定义自定义< UserControl ... />。有没有办法在那里使用ListBox模板/样式?我不需要从标准ListBox中修改GUI。
我可能会错过一些简单的方法来执行我想要的。我很感激任何方式来做到这一点。
答案 0 :(得分:0)
不确定您的设置,但您可能必须覆盖ListBox和ListBoxItem。然后覆盖一些方法:
public partial class MyListBox: ListBox
{
protected override System.Windows.DependencyObject GetContainerForItemOverride()
{
return new MyListBoxItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is MyListBoxItem;
}
}
public class MyListBoxItem : ListBoxItem
{
}
这将强制您的容器成为ListBoxItem覆盖。
现在您只需在ListBoxItem覆盖中实现特定代码tof键。如果您不需要任何样式更改,则将应用默认的ListBox样式。
现在您可以在XAML中使用它了:
<local:MyListBox ItemsSource="{Binding Items}">
<local:MyListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding id}"/>
</DataTemplate>
</local:MyListBox.ItemTemplate>
</local:MyListBox>