从WPF中的自定义窗口继承

Ido*_*dov 4 wpf window

我在WPF中有一个costum窗口,我想用它作为其他窗口的基本窗口.
当我尝试继承它时,我在XAML中写道:

<my:MyWindow x:Class="NewWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:my="clr-namespace:MyNamesapce;assembly=MyAssembly"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
Run Code Online (Sandbox Code Playgroud)

在我写的.cs代码中:

namespace SomeOtherNamespace
{
    public partial class NewWindow: MyWindow
    {
        internal NewWindow(Control ctrl) : base(ctrl)
        {
            InitializeComponent();
            this.ResizeMode = System.Windows.ResizeMode.NoResize;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但后来我得到了错误:

不能是XAML文件的根,因为它是使用XAML定义的.

我做错了什么,我该如何解决?

Wil*_*ues 9

如果你想要实现的是在每个窗口中设置ResizeMode,NoResize你可以使用这样的样式:

<Style TargetType="Window" x:Key="windowStyle">
    <Setter Property="ResizeMode" Value="NoResize" />
</Style>
Run Code Online (Sandbox Code Playgroud)

将此样式放在ResourceDictionary中并使其成为窗口样式:

Style="{StaticResource windowStyle}"
Run Code Online (Sandbox Code Playgroud)

但是如果你想要更进一步,你将不得不创建一个继承自Window的新类

public class MyWindow : Window
{
    public MyWindow()
    {
        this.ResizeMode = ResizeMode.NoResize;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以实现一个新的 MyWindow

<mn:MyWindow x:Class="Project.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mn="clr-namespace:MyControls"
        Height="300" Width="300">
</mn:MyWindow>
Run Code Online (Sandbox Code Playgroud)

请注意,将成为此新窗口的"代码隐藏"的MyWindow类需要从您的新类继承,如下所示:

namespace Project
{
    public partial class Window1 : MyControls.MyWindow
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对你有帮助吗?如果你接受它,我将不胜感激 (2认同)