我想为 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>
正如您已经注意到的,我删除了Application
的StartupUri
属性,因为我正在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();
}