C# 从列表框继承
我在我的项目中使用了几个列表,而不是树,以实现适当的虚拟化(树结构中的许多项)。 这些清单基本相同。唯一的区别在于数据模板。这些列表绑定了一些事件,我必须在几个地方复制和更新这些事件。当前事件用于:C# 从列表框继承,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,我在我的项目中使用了几个列表,而不是树,以实现适当的虚拟化(树结构中的许多项)。 这些清单基本相同。唯一的区别在于数据模板。这些列表绑定了一些事件,我必须在几个地方复制和更新这些事件。当前事件用于: 防止水平自动滚动 支持箭头键在树结构中导航 我在资源字典中找不到以单一样式绑定事件的方法,因为事件必须属于特定的类。所以我必须在类之间复制完全相同的事件,并将它们绑定到特定的列表。这是相当多的文本,包括XAML和代码 我想做的是定义一个新的用户控件,从standart ListBox派生所有内容
- 防止水平自动滚动
- 支持箭头键在树结构中导航
我可能会错过一些简单的方法来实现我想要的。我非常感谢您的帮助。不确定您的设置,但您可能需要覆盖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键。如果不需要任何样式更改,将应用默认的列表框样式
现在,您可以在XAML中使用它:
<local:MyListBox ItemsSource="{Binding Items}">
<local:MyListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding id}"/>
</DataTemplate>
</local:MyListBox.ItemTemplate>
</local:MyListBox>
代码中的类继承不是问题。问题是,如果不为这个重写类定义XAML UserControl,我就无法使用它。VisualStudio告诉我这样的类在WPF中不可用。试着把我的列表放在你的窗口上。我刚刚测试过,一切正常。你能从VisualStudio发布准确的错误消息吗?奇怪,在我的项目中尝试了这个方法,但没有成功。在blank项目中尝试了同样的方法,而且构建得很好。谢谢你的帮助!对不起,我犯了个愚蠢的错误。