【问题标题】:WPF MetroWindow Min Max Close background when app loses focusWPF MetroWindow Min Max 应用程序失去焦点时关闭背景
【发布时间】:2020-04-15 07:40:42
【问题描述】:

我正在开发一个使用 MahApps MetroWindow 作为主窗口的 WPF 应用程序。我在 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

虽然我可以更改此事件中按钮的背景,但在 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)时,有没有办法设置这些按钮的背景?

【问题讨论】:

    标签: c# wpf mahapps.metro


    【解决方案1】:

    只需将DataTrigger 添加到Style 中的&lt;ControlTemplate.Triggers&gt; 元素,该元素绑定到父窗口的Active 属性:

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

    【讨论】:

    • 哈哈,我想这样做,但我不得不这样做。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多