App.xaml中的全局样式应用于设计器但不是最近的运行时

时间:2016-03-03 17:03:00

标签: c# wpf app.xaml

问题

我正在开发一个应用程序,最近我重新组织了文件结构,因为我正在添加更多部件。大约在这个时候,我注意到在运行时,我的App.xaml中的样式没有得到应用。我在构建之前立刻做了很多代码更改,所以我不确定可能会发生什么变化。

信息

App.xaml在停止应用之前保持不变。

我的程序被布局为有一个主<ContentControl>,我将一些视图绑定到一些MVVM动作。最初我在一个Views文件夹中获得了我的程序的不同子功能的所有视图,但是单个部分变得太大,所以我将它们从中分离出来:

<Project>/Models
<Project>/ViewModels
<Project>/Views

<Project>/EventEditor/Models
<Project>/EventEditor/ViewModels
<Project>/EventEditor/Views
<Project>/ConfigurationEditor/Models
<Project>/ConfigurationEditor/ViewModels
<Project>/ConfigurationEditor/Views

我的UserControl没有自己的任何资源或样式,现在应该只使用App.xaml中的那些。

我只有1个App.xaml文件,并且没有其他文件包含单个视图XAML之外的样式/字典/等。

这是我的App.xaml:

<Application x:Class="EventSuite.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:EventSuite"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <!-- Global Styles -->
    <Style TargetType="ListBoxItem">
        <Setter Property="FontSize" Value="14" />
    </Style>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="14" />
    </Style>
    <Style TargetType="Label">
        <Setter Property="FontSize" Value="14" />
    </Style>
    <Style TargetType="Button">
        <Setter Property="Margin" Value="2,0,2,0"/>
        <Setter Property="Padding" Value="2"/>
        <Setter Property="FontSize" Value="14"/>
    </Style>
</Application.Resources>

采取的步骤

  1. 清理构建/重建
  2. 打破并使用Tree Visualizer进行调查(没有运气)
  3. 区分文件/项目。我发现的任何东西都不会造成这种情况(我不知道到底要找什么)
  4. 问题

    1. 有没有办法调试正在使用的样式?我尝试了WPF Tree Visualizer,它在我的按钮上显示了null样式,这是我所期望的,因为我没有明确设置任何样式。
    2. 文件结构可以发挥作用吗?也许App.xaml没有被正确读取,或者它没有被正确应用。我没有看到任何警告或失败的迹象。
    3. 命名空间有关吗?我希望不会......
    4. 总之,我有点迷失App.xaml在设计时而不是在运行时应用的原因。为什么在对我的项目进行一些更改后会发生这种情况。我搞不清楚了!如果您需要更多信息或示例,请与我们联系。

1 个答案:

答案 0 :(得分:1)

原来这是App.xaml StartupURI的一个问题。

我的StartupURI是MainWindow.xaml,我的App.xaml.cs如下:

public partial class App : Application
{
    public App()
    {
        var dialog = new SageCenter.View.MainWindow();
        dialog.ShowDialog();
    }
}

我的应用程序永远不会调用InitializeComponent(),但我的窗口仍在创建中。我将StartupURI保存在App.xaml中并将App.xaml.cs更改为此以修复它:

    public partial class App : Application
{
    public App()
    {
        InitializeComponent();
    }
}

StartupURI="MainWindow.xaml"导致InitializeComponent()调用实例化我的窗口。