为什么我的WPF样式没有在设计器中显示?

时间:2010-08-09 10:00:00

标签: wpf visual-studio-2010

我使用Visual Studio 2010创建了一个WPF应用程序,将App.xaml转换为Page并在构造函数中添加了对InitializeComponent的调用。然后我创建了一个名为“LoginWindow”的新窗口,并将以下内容添加到App.xaml.cs中:

    [STAThread]
    public static void Main()
    {
        var app = new App();
        app.Run(new LoginWindow());
    }

接下来,我向App.xaml添加了一个样式,如下所示:

    <Style x:Key="MyWindowStyle" TargetType="Window">
        <Setter Property="Background" Value="Red" />
    </Style>

最后,在LoginWindow中我添加了以下样式引用:

Style="{StaticResource MyWindowStyle}"

当我运行程序时,我看到我的登录窗口有一个红色背景,如预期的那样。但是,当我在设计器中查看窗口时,未应用样式。 {StaticResource MyWindowStyle}是下划线并显示错误,“资源'MyWindowStyle'无法解析”。

为什么会这样?

修改

我得到了另一个问题的解决方案,这个问题也解决了这个问题。我停止了app.xaml作为一个页面并使用了StartUp而不是Main方法。

2 个答案:

答案 0 :(得分:1)

我不确定您的设计师问题的原因,但我的建议是回到默认的WPF应用程序模板,看看是否有效。

App.xaml是一个重要文件,不应转换为页面(您应该添加单独的页面),并且您不需要使用Main方法来启动应用程序:默认app.xaml文件,您会看到(在默认项目中)StartupUri="MainWindow.xaml"的属性 - 使用该属性指向您的LoginWindow.xaml

我刚刚在VS中尝试使用标准模板进行检查,我认为没问题。为了确认,我所做的就是将你的风格添加到(默认)app.xaml文件中,并以与你相同的方式将其应用到我的窗口 - 它在设计师中显示得很好。

答案 1 :(得分:0)

它没有出现在设计器中的原因是它只查看UserControl /任何+任何名为App的XAML的应用程序。由于您将App.Xaml设置为页面,因此设计人员无法知道UserControl将托管在其中。在运行时,WPF将查看Page和它可能拥有的任何Parent(包括Parent的Parent等)。

相反,让App.xaml指向一个'dummy'页面,在其中覆盖Loaded-event导航到带有DataContext集的右页面。