WPF MetroWindow Min Max Закрыть фон, когда приложение теряет фокус - PullRequest
2 голосов
/ 15 апреля 2020

Я работаю над приложением WPF, которое использует MahApps MetroWindow в качестве главного окна. Я использовал стили для кнопок «Свернуть / Развернуть» и «Закрыть», которые встроены в MetroWindow. Стиль в настоящее время выглядит следующим образом: (стиль максимизации и закрытия близок)

<Controls:MetroWindow.WindowMinButtonStyle>
        <Style TargetType="Button">
            <Setter Property="Background" Value="{DynamicResource PrimaryHueMidBrush}"/>
            <Setter Property="Foreground" Value="{DynamicResource BlackBrush}"/>
            <Setter Property="Width" Value="35"/>
            <Setter Property="HorizontalContentAlignment"
                    Value="Center" />
            <Setter Property="VerticalContentAlignment"
                    Value="Center" />
            <Setter Property="Padding"
                    Value="1" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid x:Name="grid"
                              Background="{TemplateBinding Background}">
                            <ContentPresenter x:Name="contentPresenter"
                                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              Margin="{TemplateBinding Padding}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              RecognizesAccessKey="True"
                                              Opacity="0.75" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver"
                                     Value="True">
                                <Setter TargetName="contentPresenter"
                                        Property="Opacity"
                                        Value="1" />
                            </Trigger>
                            <Trigger Property="IsMouseOver"
                                     Value="False">
                                <Setter TargetName="contentPresenter"
                                        Property="Opacity"
                                        Value=".5" />
                            </Trigger>
                            <Trigger Property="IsEnabled"
                                     Value="false">
                                <Setter Property="Foreground"
                                        Value="#ADADAD" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Controls:MetroWindow.WindowMinButtonStyle>

Сам стиль работает, как и ожидалось, но я упускаю одну вещь:

  • Когда приложение теряет фокус, я хочу установить фон этих кнопок серым, как и все остальные приложения. На данный момент кнопки все еще привязаны к ресурсу PrimaryHueMidBrush.

Хотя я мог бы изменить фон кнопок в этом событии, но я не могу найти кнопки закрытия max max в MetroWindow.

private void Window_Deactivated(object sender, EventArgs e)
        {
            SolidColorBrush gray = new SolidColorBrush(Colors.Gray);
            StatusBar.Background = gray;
        }

        private void Window_Activated(object sender, EventArgs e)
        {
            StatusBar.Background = (SolidColorBrush)FindResource("PrimaryHueMidBrush");
        }

Есть ли способ установить фон этих кнопок, когда приложение теряет фокус (window_deactivation)?

1 Ответ

1 голос
/ 15 апреля 2020

Просто добавьте DataTrigger к элементу <ControlTemplate.Triggers> в Style, который привязывается к свойству Active родительского окна:

<DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource AncestorType=Window}}"
             Value="False">
    <Setter Property="Background" Value="Gray"/>
</DataTrigger>
...