2013-01-17 52 views
3

我在WPF中有一个成本窗口,我想用它作为其他窗口的基本窗口。
当我尝试继承它,我写在XAML:继承自WPF中的自定义窗口

<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.

我在做什么错,我该如何解决?

+0

.cs类中的内容是什么? – ZSH

+2

如果要在XAML中派生控件,则无法在XAML中定义基础控件。 –

+0

你想从主窗口继承什么?您可以使用基础样式来完成此操作。 –

回答

7

如果你想实现的是设置ResizeModeNoResize在每一个窗口中你可以使用这样的风格:

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

将这个风格在ResourceDictionary中,并使其成为窗口样式:

Style="{StaticResource windowStyle}" 

但是如果你想走得更远,你将不得不作出一个新的类从窗口继承

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

你能说你的xaml代码里有什么“mn”吗? Esi

+0

它是对“MyControls”命名空间的引用。正如你在代码'xmlns:mn =“clr-namespace:MyControls”'中看到的那样。 –

+0

我明白了,谢谢 – Esi