在XAML中定义的WPF窗口上使用泛型参数

时间:2010-07-15 03:23:21

标签: c# wpf generics xaml

我正在尝试在XAML中创建一个Window派生类,它可以采用泛型参数,但我似乎无法在XAML中定义泛型参数,以便它生成与我的代码隐藏文件匹配的部分类

我想要完成的是替换所有MessageBox调用以询问用户问题,我可以在哪里给出有意义的按钮标题('保存并退出'/'退出而不保存'/'不要退出'类型的东西)。我希望能够向窗口传递一个通用参数,该参数约束为System.Enum,用于定义所选选项的返回值:

<Window x:Class="EvilPenguin.MultipleChoiceQuestionBox">
    ...

public partial class MultipleChoiceQuestionBox<T> : Window where T : System.Enum
{
    public MultipleChoiceQuestionBox()
    {
        InitializeComponent();
    }

    public T SelectedOption
    {
        get;
    }
}
  • 有没有办法让我的XAML生成一个带有正确通用参数的分部类?
  • 我做错了吗?出于某种原因这是一个坏主意,还是有更简单的方法?
  • 目前在XAML中这是不可能的吗? x:TypeArgument属性并不能完全符合我的要求,但它表明XAML的至少某些方面知道泛型参数

非常感谢任何帮助或提示

3 个答案:

答案 0 :(得分:7)

你不能这样做。这是my answer to this similar SO question

不,您不能在XAML中声明泛型类型。来自http://social.msdn.microsoft.com/forums/en-US/wpf/thread/02ca0499-80af-4c56-bb80-f1185a619a9e

  

您好,您可以使用泛型   你不使用XAML。但不幸的是,   如果你想使用XAML来定义你的   控制,你不能使用泛型...

您可以通过在根标记上放置x:TypeArguments属性来在XAML中创建继承自泛型类型的控件,但控件本身必须具体。

答案 1 :(得分:3)

我不是XAML专家,但快速谷歌搜索“XAML标记中的泛型”引导我阅读这篇MSDN文章:http://msdn.microsoft.com/en-us/library/ee956431.aspx

似乎表明你确实可以在XAML中使用泛型。看看这是否适合您的情况。

<my:BusinessObject x:TypeArguments="x:String,x:Int32"/>

答案 2 :(得分:2)

尝试使用x:Subclass并使子类成为通用的。这允许设计基类(并加载XAML)和派生类以使用泛型类型。