Почему стиль не применяется, когда я удаляю StartupUri в WPF? - PullRequest
1 голос
/ 19 сентября 2019

Я хочу применить стиль по умолчанию для всех Button s в приложении WPF.Это тестовое приложение имеет два Window с, оба из которых определяют один и тот же пользовательский интерфейс, показанный ниже.

<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>

и, как вы заметили, я удалил свойство StartupUri Application, поскольку я создаю оба окна в OnStartUp().

App.xaml.cs

      protected override void OnStartup(StartupEventArgs e)
      {
            base.OnStartup(e);

            new MainWindow().Show();
            new SecondaryWindow().Show();
      }

Проблема

Стили не применяются во время выполнения (но они применяются в конструкторе).Теперь, если я помещаю свойство StartUpUri в App.xaml, оно работает.

В чем здесь дело?

Редактировать

Если вызов base.OnStartup(e) удален из OnStartup(), то он работает.

1 Ответ

1 голос
/ 19 сентября 2019

Вы можете создавать свои окна в обработчике автозагрузки.

private void App_OnStartup(object sender, StartupEventArgs e)
{
    new MainWindow().Show();
    new SecondaryWindow().Show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...