【问题标题】:Using generic arguments on WPF Window defined in XAML在 XAML 中定义的 WPF 窗口上使用通用参数
【发布时间】:2010-07-15 03:23:21
【问题描述】:

我正在尝试在 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 的某些方面知道通用参数

非常感谢任何帮助或提示

【问题讨论】:

标签: c# wpf generics xaml


【解决方案1】:

你做不到。这里是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 中创建一个从泛型类型继承的控件,但该控件本身必须是具体的。

【讨论】:

【解决方案2】:

我不是 XAML 专家,但在 Google 上快速搜索“XAML 标记中的泛型”后,我找到了这篇 MSDN 文章:http://msdn.microsoft.com/en-us/library/ee956431.aspx

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

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

【讨论】:

  • 感谢您的帮助,但在这种情况下,如果我希望生成的类从 Window 派生,而不是让编译器为 MultipleChoiceQuestionBox
【解决方案3】:

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

【讨论】:

  • 你能详细说明一下吗?我似乎也无法在 x:Subclass 属性上指定通用参数,而且我不确定如何使用它来创建一个可以重用于不同枚举类型的类
  • 确定由 Subclass 指定的类型将具有泛型参数,而正在设计的类仍然没有泛型参数。类似于
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多