WPF-具有非Window基类的对话框,其中该基类实现泛型

时间:2018-11-03 16:22:34

标签: wpf xaml

我有一个类似于this post的问题。

简而言之,如果您在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
    {
    ...

作为后面的代码。提问者询问的是,如果您插入的场景中插入了一些基类场景,即xpml会发生什么情况,即

   public partial class Window1 : BaseWindow
{
.....  

其中

public class BaseWindow : Window
{
...

我的问题是对此的扩展。如果您遇到上述情况,但使用

public class BaseWindow<T> : Window
{
...

我显然也有

public partial class Window1 : BaseWindow<SomeConcreteClass>
{
...

是否可以用xaml表示此层次结构?如果是这样,xaml是什么样的?我专门考虑在这里使用泛型,而不是对象。我刚刚遇到了泛型看起来有用的场景,但是我不确定如何在涉及xaml的WPF中实现它。非常感谢。

1 个答案:

答案 0 :(得分:1)

是的,您应该在XAML标记中使用x:TypeArguments directive

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>