WPF - диалог, имеющий базовый класс, отличный от Window, где этот базовый класс реализует обобщенные
У меня такой же вопрос к этому посту.
Короче говоря, если вы создаете диалог в WPF, вы получаете из Visual Studio:
<Window x:Class="FrontEnd.View.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DiabetesFrontEnd.View"
mc:Ignorable="d"
Title="Window1" Height="300" Width="300">
...
созданный как часть xaml, и
public partial class Window1 : Window
{
...
как код позади. Вопросник спрашивает о том, что происходит с xaml, если у вас есть сценарий со вставленным сценарием базового класса, т.е.
public partial class Window1 : BaseWindow
{
.....
где
public class BaseWindow : Window
{
...
Мой вопрос является продолжением этого. Что делать, если у вас есть сценарий выше, но с
public class BaseWindow<T> : Window
{
...
и я бы, очевидно, также
public partial class Window1 : BaseWindow<SomeConcreteClass>
{
...
Можно ли представить эту иерархию в xaml? Если да, то как выглядит xaml? Я специально думаю об использовании дженериков здесь, в отличие от объектов. Я только что натолкнулся на сценарий, в котором дженерики выглядят полезными, но я не уверен, как добиться этого в WPF, где задействован xaml. Большое спасибо.
1 ответ
Да, вы должны использовать директиву x:TypeArguments в разметке XAML.
namespace WpfApp1
{
public class BaseWindow<T> : Window { }
public class SomeConcreteClass { }
}
Window1.xaml.cs:
public partial class Window1 : BaseWindow<SomeConcreteClass>
{
public Window1()
{
InitializeComponent();
}
}
Window1.xaml:
<local:BaseWindow x:Class="WpfApp1.Window1"
x:TypeArguments="local:SomeConcreteClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="Window1" Height="300" Width="300">
<Grid>
</Grid>
</local:BaseWindow>