继承自WPF中自定义窗口的方法

4

我有一个WPF中的自定义窗口,我想将其用作其他窗口的基础窗口。
当我尝试继承它时,在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">

在我的.cs代码中,我写了:
namespace SomeOtherNamespace
{
    public partial class NewWindow: MyWindow
    {
        internal NewWindow(Control ctrl) : base(ctrl)
        {
            InitializeComponent();
            this.ResizeMode = System.Windows.ResizeMode.NoResize;
        }
    }
}

但是我遇到了这个错误:

不能作为XAML文件的根元素,因为它是使用XAML定义的。

我做错了什么,怎么修复它?


.cs类文件里面有什么? - ZSH
3
如果您想在 XAML 中生成一个控件,那么您的基础控件不能在 XAML 中定义。 - Reza ArabQaeni
你想从主窗口继承什么?你可以通过基础样式来实现。 - Adrian Fâciu
1个回答

10
如果您想在每个窗口中设置ResizeModeNoResize,可以使用以下样式:

<Style TargetType="Window" x:Key="windowStyle">
    <Setter Property="ResizeMode" Value="NoResize" />
</Style>

将这个样式放到ResourceDictionary中,并将其设置为窗口样式:
Style="{StaticResource windowStyle}"

但如果你想进一步,就需要创建一个继承自Window的新类。

public class MyWindow : Window
{
    public MyWindow()
    {
        this.ResizeMode = ResizeMode.NoResize;
    }
}

现在你可以实例化一个新的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>

请注意,将成为此新窗口的“代码后台”的类需要继承您的新MyWindow类,如下所示:

namespace Project
{
    public partial class Window1 : MyControls.MyWindow
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}

这是对 MyControls 命名空间的引用。正如您在代码中看到的 xmlns:mn="clr-namespace:MyControls" - Wiley Marques
2
这个回答是否对您有帮助?如果您接受它,我将不胜感激。 - Wiley Marques

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接