gpt4 book ai didi

wpf - 从WPF中的自定义窗口继承

转载 作者:行者123 更新时间:2023-12-02 16:16:43 26 4
gpt4 key购买 nike

我在 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;
}
}
}

但是后来我得到了错误:

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();
}
}
}

关于wpf - 从WPF中的自定义窗口继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com