2016-03-05 58 views
1

我有一个从自定义窗口继承的WPF窗口。它运行正常,但VS设计器显示它像默认的空窗口。XAML设计器不显示自定义窗口

自定义窗口代码:

using System.Windows; 
using System.Windows.Media; 

namespace WpfApplication2 
{ 
    public class CustomWindow : Window 
    { 
     public CustomWindow() 
     { 
      Background = new SolidColorBrush(Colors.Red); 
     } 
    } 
} 

MainWindow.xaml

<local:CustomWindow x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication2" 
     Title="MainWindow" Height="350" Width="525"> 

</local:CustomWindow> 

设计师:

Designer

预期结果:

Expected result

+0

你缺少'的InitializeComponent()' – VVN

+0

没有这样的功能,因为'CustomWindow'类不包含XAML。无论如何,从Windows继承包含XAML标记的类是不可能的。 – Poma

+0

什么版本/构建VS?什么版本的Windows? – Taterhead

回答

-1

Visual Studio和Blend中的XAML设计器并不一定尊重直接在代码中(尤其是在构造函数中)设置的任何依赖项属性,而是期望仅在XAML中设置这些属性在设计时使用依赖系统的规范方式。当然,如果你愿意,所有的东西都可以用代码来设置,但是当使用XAML设计器时,你不能保证你在正在运行的应用程序中会看到相同的行为。另外,如果您要在代码中设置依赖项属性,那么您需要非常小心如何设置它们,因为您可能会销毁可能最终在这些属性上设置的任何绑定。

无论如何,得到你想要的结果更好的办法是设置颜色在XAML这样

<local:CustomWindow x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication2" 
     Title="MainWindow" Height="350" Width="525" Background="Red"> 

</local:CustomWindow> 
+0

你可能没注意到'MainWindow'和'CustomWindow'是2个不同的类。如果CustomWindow类为空,没有意义。我想有一些基本的窗口类,并继承它的所有其他窗口。从已经具有XAML代码的窗口继承是不可能的,所以它必须只能是C#。 – Poma

+0

是的,我注意到了 - 当然,但是你想为XAML设计师提供一个解决方法 - 这里是 –

+0

顺便说一下,你可以有自己的样式和模板的自定义Window类,所以如果你不感兴趣在一个简单的解决方法然后尝试并付出一些努力并创建自己的完整实现 –