【问题标题】:Why are my WPF styles not shown in the designer?为什么我的 WPF 样式未在设计器中显示?
【发布时间】:2010-08-11 21:51:32
【问题描述】:

我使用 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 方法。

【问题讨论】:

  • 哪个 Visual Studio 正在使用 2008 或 2010 ? 2008 WPF 渲染有一些问题
  • VS2010 - 我将把它添加到问题中,谢谢。

标签: wpf visual-studio-2010


【解决方案1】:

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

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

我刚刚在 VS 中使用标准模板进行了测试,只是为了检查,我认为没有问题。为了确认,我所做的只是将您的样式添加到(默认)app.xaml 文件中,并以与您相同的方式将其应用到我的窗口 - 它在设计器中显示良好。

【讨论】:

  • 使用 StartupUri 意味着窗口会自动加载,我无法控制它。我需要能够在加载窗口之前设置 DataContext,因此是 Main 方法。如果有其他方法可以添加 Main 方法,我很乐意更改。
  • 我想知道您是否可以省略 StartupUri,并覆盖 Application.OnStartup 以加载您的窗口...在设计器中工作,并加载窗口,但它无法找到样式(并抛出一个例外)。出于兴趣,为什么不能在标记中设置DataContext
【解决方案2】:

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

相反,让 App.xaml 指向一个“虚拟”页面,在它被覆盖的 Loaded 事件中导航到设置了 DataContext 的正确页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多