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

10
我基于Window控件创建了一个新的CustomControl。
但是当我使用我的控件时,它在设计模式下没有出现,而是仍然使用默认的窗口样式。
我该如何强制设计器显示我的窗口样式而不是默认样式?

我的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>

这是我的整个项目链接 - 也许你会需要它

在设计师中的样子和实际效果图:

enter image description here


3
你有什么问题? - Daniel
如何强制设计师显示“正确”的窗口样式,我也编辑了我的帖子。 - Ron
2
你是指在设计器中“灰掉”的标题栏,而不是真正的窗口吗? - Omri Btian
@Omribitan 不仅如此,操作图标(关闭、最大化和最小化)也没有显示出来。如果我直接在app.xaml中使用窗口设计而不是作为自定义控件(我不想这样做,因为我还覆盖了一些功能,我需要这个控件是通用的)-它看起来很好。你想让我上传一张图片吗? - Ron
3个回答

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() 从未被调用

如何在设计时获取 WPF 类型?

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


我无法使其工作。运行时是ak,但设计时显示“正常”的窗口样式。 - Pompair

0

你在使用 Mahapps Metro,对吧?

你可以使用它提供的样式。 使用 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 的资源字典来改变窗口的颜色为其他颜色,试试看吧。


0

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

敬礼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接