WPF如何强制设计者显示自定义窗口样式

时间:2013-10-18 14:34:03

标签: wpf xaml custom-controls designer

我根据窗口CustomControl制作了新的Control 当我使用我的控件时,它不会出现在设计器模式中,而是仍然使用默认的窗口样式 如何强制设计师显示我的窗口样式而不是默认窗口?

My MainWindow.xaml:

<CustomWindow:MetroWindow x:Class="Testz.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:CustomWindow="clr-namespace:MetroWindow;assembly=MetroWindow"
        Title="MainWindow" Height="350" Width="525" BorderBrush="Red">
    <Grid>

    </Grid>
</CustomWindow:MetroWindow>

Link to my whole project - maybe you'll need it

它在设计师中的外观以及外观如何:

enter image description here

3 个答案:

答案 0 :(得分:6)

我想我理解你想要完成的事情。

问题是Visual Studio Designer无法找到资源,因为它位于库中。您需要做的是创建一个指向它的ResourceDictionary,以便能够看到设计器时间模板。

<Application x:Class="DemoMetroWindow.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MetroWindow"
             StartupUri="DemoWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:/MetroWindow;component/Themes/Generic.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

您可以从下面的链接中了解更多信息。

OnApplyTemplate() never being called

WPF get Type in Design time?

http://blogs.msdn.com/b/jgalasyn/archive/2007/10/29/troubleshooting-wpf-designer-load-failures.aspx

http://blogs.msdn.com/b/jnak/archive/2007/11/08/code-behind-and-the-wpf-designer.aspx

答案 1 :(得分:0)

你正在使用Mahapps Metro,对吧?

您可以使用它提供的样式。 Styling a window with Metro

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

您可以通过其他颜色更改Blue.xaml的资源字典来更改窗口的颜色,只需将其检出即可。

答案 2 :(得分:0)

当App.xaml中的资源引用正常时,您应该重新启动Visual Studio。在大多数情况下,主题会正确显示。

此致