我在 WPF中有一个costum窗口,我想用它作为其他窗口的基本窗口. 当我尝试继承它时,我在XAML中写道: my:MyWindow x:Class="NewWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="htt
当我尝试继承它时,我在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; } } }
但后来我得到了错误:
cannot be the root of a XAML file because it was defined using XAML.
我做错了什么,我该如何解决?
如果你想要实现的是在每个窗口中将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(); } } }