我在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">
在我写的.cs代码中:
namespace SomeOtherNamespace
{
public partial class NewWindow: MyWindow
{
internal NewWindow(Control ctrl) : base(ctrl)
{
InitializeComponent();
this.ResizeMode = System.Windows.ResizeMode.NoResize;
}
}
}
但后来我收到了错误:
不能是XAML文件的根,因为它是使用XAML定义的。
我做错了什么,如何解决?
答案 0 :(得分:9)
如果您要实现的目的是在每个窗口中将ResizeMode
设置为NoResize
,则可以使用以下样式:
<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();
}
}
}