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;
}
}
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.