开发者

Using generic arguments on WPF Window defined in XAML

开发者 https://www.devze.com 2023-01-07 00:58 出处:网络
I\'m trying to create a Window-derived class in XAML which can take a generic argument, but I can\'t seem to define the generic argument in the XAML so that it generates the partial class matching my

I'm trying to create a Window-derived class in XAML which can take a generic argument, but I can't seem to define the generic argument in the XAML so that it generates the partial class matching my code-behind file.

What I'm trying to accomplish is a replacement for all the MessageBox calls for asking the user questions, where I can give meaningful button captions ('Save and quit'/'Quit without saving'/'Don't quit' type thing). I'd like to be able to pass the window a generic argument constrained to System.Enum defining the return value for the selected option:

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

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

    public T SelectedOption
    {
        get;
    }
}
  • Is there a way I can make my XAML generate a partial class with the correct generic argument?
  • Am I 'doing it wrong'? Is this a bad idea for some reason, or is there an easier way?
  • Is this not possible in XAML at the moment? The x:TypeArgument at开发者_如何学Ctribute doesn't quite do what I want, but it suggests that at least some aspects of XAML are aware of generic arguments

Any help or hints are much appreciated


You can't do it. Here is my answer to this similar SO question:

No, you can't declare a generic type in XAML. From http://social.msdn.microsoft.com/forums/en-US/wpf/thread/02ca0499-80af-4c56-bb80-f1185a619a9e:

Hello, you can use generic as long as you don’t use XAML. But unfortunately, if you want to use XAML to define your control, you can’t use generic…

You can create a control in XAML that inherits from a generic type by putting a x:TypeArguments attribute on the root tag, but the control itself must be concrete.


I'm not a XAML expert, but a quick google search for "generics in XAML markup" lead me to this MSDN article: http://msdn.microsoft.com/en-us/library/ee956431.aspx

It seems to indicate that you can indeed use generics in XAML. See if this fits your scenario.

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


Try using x:Subclass and make the subclass a generic. This allows the base class to be designed (and load the XAML) and the derived to use a generic type.

0

精彩评论

暂无评论...
验证码 换一张
取 消