wpf WPF如何获得最大化/最小化按钮图标 - 自定义标题栏

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32022761/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 13:20:37  来源:igfitidea点击:

WPF how to get maximize/minimize button icon - Custom title bar

c#wpfwindows

提问by Le General de Cuddles

I'm trying to create a custom title bar for my application. I have no idea how to add a the windows maximize or minimize icon to the button. I want my icons o look similar to this

我正在尝试为我的应用程序创建自定义标题栏。我不知道如何向按钮添加窗口最大化或最小化图标。我希望我的图标看起来像这样

Maximize/Minimize example

最大化/最小化示例

Here is my XAML for my buttons

这是我的按钮的 XAML

            <Button Command="{x:Static SystemCommands.MaximizeWindowCommand}" Content="+" Canvas.Left="1020" Height="30" Width="30">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Background" Value="Black"/>
                    <Setter Property="TextBlock.Foreground" Value="White"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Background="{TemplateBinding Background}">
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="#403c47"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
        <Button Command="{x:Static SystemCommands.MinimizeWindowCommand}" Content="" Canvas.Left="990" Height="30" Width="30" >
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Setter Property="Background" Value="Black"/>
                    <Setter Property="TextBlock.Foreground" Value="White"/>
                    <Setter Property="FontSize" Value="24"/>
                    <Setter Property="TextBlock.LineHeight" Value="5"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border Background="{TemplateBinding Background}">
                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="#403c47"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

Any assistance is appreciated :)

任何帮助表示赞赏:)

回答by Xilmiki

This an extract of code i have used. (in my case is a reusable Window class extension, too long to post entirely)

这是我使用过的代码摘录。(在我的例子中是一个可重用的 Window 类扩展,太长而无法完全发布)

XAML 2 button minimize and maximize

XAML 2 按钮最小化和最大化

<Grid Margin="1,0,1,0">
    <Button x:Name="Restore" Command="{Binding Source={x:Static SystemCommands.RestoreWindowCommand}}"  Visibility="Collapsed" Style="{StaticResource WindowButtonStyle}">
        <Grid Width="30" Height="25" UseLayoutRounding="True" RenderTransform="1,0,0,1,.5,.5">
            <Path Data="M2,0 L8,0 L8,6 M0,3 L6,3 M0,2 L6,2 L6,8 L0,8 Z" Width="8" Height="8" VerticalAlignment="Center" HorizontalAlignment="Center"
                Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}, Mode=FindAncestor}}" StrokeThickness="1"  />
        </Grid>
    </Button>
    <Button x:Name="Maximize" Command="{Binding Source={x:Static SystemCommands.MaximizeWindowCommand}}"  Style="{StaticResource WindowButtonStyle}">
        <Grid Width="31" Height="25">
            <Path Data="M0,1 L9,1 L9,8 L0,8 Z" Width="9" Height="8" VerticalAlignment="Center" HorizontalAlignment="Center"
                Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}, Mode=FindAncestor}}" StrokeThickness="2"  />
        </Grid>
    </Button>
</Grid>

Trigger to hide minimize/maximize button when window is maximized/minimized

当窗口最大化/最小化时触发隐藏最小化/最大化按钮

<ControlTemplate.Triggers>
    <Trigger Property="WindowState" Value="Maximized">
        <Setter TargetName="Maximize" Property="Visibility" Value="Collapsed" />
        <Setter TargetName="Restore" Property="Visibility" Value="Visible" />
    </Trigger>
    <Trigger Property="WindowState" Value="Normal">
        <Setter TargetName="Maximize" Property="Visibility" Value="Visible" />
        <Setter TargetName="Restore" Property="Visibility" Value="Collapsed" />
    </Trigger>
    .....
</ControlTemplate.Triggers>

enter image description here

在此处输入图片说明

Hope can adapt to your needs.

希望能适应您的需求。

回答by George Helyar

An alternative solution is to use the Webdingsfont, which has minimise, maximise and restore glyphs on 0, 1 and 2 respectively.

另一种解决方案是使用Webdings字体,它分别在 0、1 和 2 上具有最小化、最大化和恢复字形。

There are also unicode characters for these e.g. but they are relatively recent and don't currently seem to work correctly in all locales.

这些也有 unicode 字符,例如 但它们相对较新,目前似乎无法在所有语言环境中正常工作。