c# - 设计窗口样式

标签 c# wpf styles windows-shell skinning

有没有办法将样式应用于 WPF Windows?例如:更改最小化、最大化和 X 按钮?我知道图形是 Windows shell 的一部分,而不是 WPF,所以我不确定这是否可能。

最佳答案

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
x:Class="AccountOperator.CustomWindowStyle"
x:Name="Window"
Title="CustomWindowStyle"
Width="640" Height="480" WindowStyle="None" Margin="0" BorderThickness="2">

<Window.Resources>

    <Style x:Key="MaxButtonStyle" TargetType="{x:Type Button}">         
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border  BorderBrush="#535666" BorderThickness="2,5,2,2" Width="20" Height="15" Background="White"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="MinButtonStyle" TargetType="{x:Type Button}">

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border  Width="20" Height="7"  BorderBrush="#535666" BorderThickness="2" Background="#FFFFFF" HorizontalAlignment="Left" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


    <Style x:Key="CloseButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Border Width="18" Height="4" BorderThickness="2" BorderBrush="#535666" RenderTransformOrigin="0.5,0.5">
                            <Border.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform Angle="50"/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Border.RenderTransform>
                        </Border>
                        <Border Width="18" Height="4" BorderThickness="2" BorderBrush="#535666" RenderTransformOrigin="0.5,0.5">
                            <Border.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform Angle="-50"/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Border.RenderTransform>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <StackPanel  Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Right">      
        <Button x:Name="BtnMax" Width="20" Height="15" Click="BtnMax_Click" Style="{DynamicResource MaxButtonStyle}" Margin="10"/>
        <Button x:Name="BtnClose" Height="18" Width="20" Margin="10"  Style="{DynamicResource CloseButtonStyle}" Click="BtnClose_Click"/>
        <Button x:Name="BtnMin" Width="20" Height="20" Style="{DynamicResource MinButtonStyle}" Click="BtnMin_Click" Margin="10"/>
    </StackPanel>
</Grid>

public partial class CustomWindowStyle : Window
{
    public CustomWindowStyle()
    {
        this.InitializeComponent();
    }

    private void BtnMax_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.WindowState = WindowState.Maximized;
    }

    private void BtnMin_Click(object sender, System.Windows.RoutedEventArgs e)
    {           
        this.WindowState = WindowState.Minimized; 
    }

    private void BtnClose_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.Close();
    }       
}

您只需复制并粘贴上面的代码即可得到您想要的结果。

关于c# - 设计窗口样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446215/

相关文章:

python - pygtk全局标签样式

html - 圆 Angular 表格 HTML 在数据增加时被削减

c# - 如何使用 Novell.Directory.Ldap.NETStandard 和 Simple Paged Results 控件在 Ldap 服务器上进行分页搜索?

javascript - MVC5 Controller 未接收ajax发布的html内容

c# - 在 Enterprise Architect 中查询查找工具集及其元素

c# - 分组和计数

wpf - 定义我要打印的流程文档在页面上的位置为 'start' 和 'end'

wpf - WPF/Silverlight 能否生成独立的可执行文件?

wpf - C# WPF 使用点在墨水 Canvas 上绘制描边

reactjs - 从 materialui 组件中删除/覆盖默认样式