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 ファイルのルートにすることはできません。

私は何を間違っていますか?どうすれば修正できますか?

4

1 に答える 1

9

達成しようとしていることがすべてのウィンドウでに設定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();
        }
    }
}
于 2013-01-17T16:57:05.070 に答える