Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表框继承_C#_Wpf_Xaml_Listbox - Fatal编程技术网

C# 从列表框继承

C# 从列表框继承,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,我在我的项目中使用了几个列表,而不是树,以实现适当的虚拟化(树结构中的许多项)。 这些清单基本相同。唯一的区别在于数据模板。这些列表绑定了一些事件,我必须在几个地方复制和更新这些事件。当前事件用于: 防止水平自动滚动 支持箭头键在树结构中导航 我在资源字典中找不到以单一样式绑定事件的方法,因为事件必须属于特定的类。所以我必须在类之间复制完全相同的事件,并将它们绑定到特定的列表。这是相当多的文本,包括XAML和代码 我想做的是定义一个新的用户控件,从standart ListBox派生所有内容

我在我的项目中使用了几个列表,而不是树,以实现适当的虚拟化(树结构中的许多项)。 这些清单基本相同。唯一的区别在于数据模板。这些列表绑定了一些事件,我必须在几个地方复制和更新这些事件。当前事件用于:

  • 防止水平自动滚动
  • 支持箭头键在树结构中导航
我在资源字典中找不到以单一样式绑定事件的方法,因为事件必须属于特定的类。所以我必须在类之间复制完全相同的事件,并将它们绑定到特定的列表。这是相当多的文本,包括XAML和代码

我想做的是定义一个新的用户控件,从standart ListBox派生所有内容,但覆盖一些次要方法(而不是事件)。并在需要此类列表的任何地方重用此控件,而无需复制所有事件

问题是-需要我定义自定义。有没有一种方法可以直接使用列表框模板/样式?我不需要从standart ListBox修改GUI


我可能会错过一些简单的方法来实现我想要的。我非常感谢您的帮助。

不确定您的设置,但您可能需要覆盖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项目中尝试了同样的方法,而且构建得很好。谢谢你的帮助!对不起,我犯了个愚蠢的错误。