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>
Другие вопросы по тегам