WPF MetroWindow Min Max Закрыть фон, когда приложение теряет фокус

Я работаю над приложением 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.

Хотя я мог бы изменить фон кнопок в этом событии, но я не могу найти кнопки закрытия min 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_deactivated)?


person PepijnH    schedule 15.04.2020    source источник


Ответы (1)


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

<DataTrigger Binding="{Binding IsActive, RelativeSource={RelativeSource AncestorType=Window}}"
             Value="False">
    <Setter Property="Background" Value="Gray"/>
</DataTrigger>
person mm8    schedule 15.04.2020
comment
Ха-ха, я хотел это сделать, но у меня была маленькая репутация, чтобы сделать это.. В любом случае, еще раз спасибо! - person PepijnH; 16.04.2020