为什么在 WPF 中删除 StartupUri 时不应用样式?



我想为 WPF 应用程序中的所有Button应用默认样式。此测试应用有两个Window,都定义了显示波纹管的相同 UI。

<StackPanel Orientation="Vertical" Margin="10">
<Button Content="Red Button Style" />
<Button Content="Red Button Style" />
<Button Content="Red Button Style" />
<Button Content="Red Button Style" />
</StackPanel>

所以我在App.xaml中定义了全局风格

<Application x:Class="GlobalStyles.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GlobalStyles">
<Application.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Height"
Value="30" />
<Setter Property="MinWidth"
Value="180" />
<Setter Property="FontSize"
Value="16" />
<Setter Property="HorizontalAlignment"
Value="Center" />
<Setter Property="Padding"
Value="8 0" />
<Setter Property="Margin"
Value="4" />
<Setter Property="Cursor"
Value="Hand" />
<Setter Property="BorderThickness"
Value="2" />
<Setter Property="BorderBrush"
Value="DarkRed" />
<Setter Property="Foreground"
Value="White" />
<Setter Property="Background"
Value="OrangeRed" />
</Style>
</Application.Resources>
</Application>

正如您已经注意到的,我删除了ApplicationStartupUri属性,因为我正在OnStartUp()创建两个窗口。

应用xaml.cs

protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
new MainWindow().Show();
new SecondaryWindow().Show();
}

问题所在

这些样式不会在运行时应用(但它们在设计器上应用(。现在,如果我将StartUpUri属性放在App.xaml内,那么它可以工作。

这是怎么回事?

编辑

如果从OnStartup()中删除base.OnStartup(e)调用,则它可以工作。

您可以在启动处理程序中创建窗口。

private void App_OnStartup(object sender, StartupEventArgs e)
{
new MainWindow().Show();
new SecondaryWindow().Show();
}

相关内容

  • 没有找到相关文章