C# 设计窗户的样式

C# 设计窗户的样式,c#,wpf,styles,windows-shell,skinning,C#,Wpf,Styles,Windows Shell,Skinning,有没有办法将样式应用于WPF窗口?例如:更改最小化、最大化和X按钮?我知道图形是Windows外壳的一部分,而不是WPF,所以我不确定这是否可行。是的,您可以根据自己的意愿设置窗口样式。 不幸的是,如果你想设计标题栏、系统按钮、窗口的横截面或形状的样式,这通常是一个全有或全无的问题 首先,设置Window.WindowStyle=WindowStyle.None 然后可以使用ContolTemplate创建新的wpf样式。 您可能需要编写一些代码来处理窗口拖动、标题栏双击、调整大小等操作。是的,

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

是的,您可以根据自己的意愿设置窗口样式。 不幸的是,如果你想设计标题栏、系统按钮、窗口的横截面或形状的样式,这通常是一个全有或全无的问题

首先,设置Window.WindowStyle=WindowStyle.None 然后可以使用ContolTemplate创建新的wpf样式。
您可能需要编写一些代码来处理窗口拖动、标题栏双击、调整大小等操作。

是的,您可以根据需要设置窗口样式。 不幸的是,如果你想设计标题栏、系统按钮、窗口的横截面或形状的样式,这通常是一个全有或全无的问题

首先,设置Window.WindowStyle=WindowStyle.None 然后可以使用ContolTemplate创建新的wpf样式。
您可能需要编写一些代码来处理窗口拖动、标题栏双击、调整大小等操作。

您可以使用以下项目来完成任务:

此项目中的文件是ButtonNicons.xaml,您可以更改这些按钮的属性

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <!-- MINIMIZE -->
  <Border x:Key="WindowButtonMinimizeIcon" Width="12" Height="5" Margin="0,5,0,0" BorderBrush="#535666" BorderThickness="1" Background="#FFFFFF" />

  <!-- MINIMIZE (disabled) -->
  <Border x:Key="WindowButtonMinimizeIconDisabled" Width="12" Height="5" Margin="0,5,0,0" 
          BorderBrush="#9FA5B2" BorderThickness="1" Background="#FFFFFF" />

  <!-- RESTORE -->
  <Canvas x:Key="WindowButtonRestoreIcon">
    <Rectangle Stroke="#535666" Fill="White" Width="10" Height="10" Canvas.Top="1" Canvas.Left="7" />
    <Rectangle Stroke="#535666" Fill="White" Width="4" Height="4" Canvas.Top="4" Canvas.Left="10" />
    <Rectangle Stroke="#535666" Fill="White" Width="10" Height="10" Canvas.Top="3" Canvas.Left="5" />
    <Rectangle Stroke="#535666" Fill="White" Width="4" Height="4" Canvas.Top="6" Canvas.Left="8" />
  </Canvas>

  <!-- RESTORE (disabled) -->
  <Canvas x:Key="WindowButtonRestoreIconDisabled">
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="10" Height="10" Canvas.Top="1" Canvas.Left="7" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="4" Height="4" Canvas.Top="4" Canvas.Left="10" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="10" Height="10" Canvas.Top="3" Canvas.Left="5" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="4" Height="4" Canvas.Top="6" Canvas.Left="8" />
  </Canvas>

  <!-- MAXIMIZE -->
  <Border x:Key="WindowButtonMaximizeIcon" BorderBrush="#535666" BorderThickness="1" Width="12" Height="10">
    <Border BorderBrush="#FCFCFC" BorderThickness="2">
      <Border BorderBrush="#535666" BorderThickness="1" />
    </Border>
  </Border>


  <!-- MAXIMIZE (disabled) -->
  <Border x:Key="WindowButtonMaximizeIconDisabled" BorderBrush="#9FA5B2" BorderThickness="1" Width="12" Height="10">
    <Border BorderBrush="#FCFCFC" BorderThickness="2">
      <Border BorderBrush="#9FA5B2" BorderThickness="1" />
    </Border>
  </Border>

  <!-- CLOSE -->
  <Image Source="/CustomWindow;component/Images/buttonX.png" Width="13" Height="10" x:Key="WindowButtonCloseIcon" />

  <!-- Background colors for red button (e.g close button) -->
  <LinearGradientBrush x:Key="RedButtonBackground" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Offset="0" Color="#F89C8C" />
    <GradientStop Offset="0.45" Color="#D47F75" />
    <GradientStop Offset="0.45" Color="#C04C3C" />
    <GradientStop Offset="1" Color="#C98172" />
  </LinearGradientBrush>

  <LinearGradientBrush x:Key="RedButtonMouseOverBackground" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Offset="0" Color="#F89C8C" />
    <GradientStop Offset="0.45" Color="#E36A53" />
    <GradientStop Offset="0.45" Color="#C72B0E" />
    <GradientStop Offset="0.75" Color="#D44310" />
    <GradientStop Offset="1" Color="#F5E478" />
  </LinearGradientBrush>

</ResourceDictionary>

您可以使用来完成以下项目中的任务:

此项目中的文件是ButtonNicons.xaml,您可以更改这些按钮的属性

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <!-- MINIMIZE -->
  <Border x:Key="WindowButtonMinimizeIcon" Width="12" Height="5" Margin="0,5,0,0" BorderBrush="#535666" BorderThickness="1" Background="#FFFFFF" />

  <!-- MINIMIZE (disabled) -->
  <Border x:Key="WindowButtonMinimizeIconDisabled" Width="12" Height="5" Margin="0,5,0,0" 
          BorderBrush="#9FA5B2" BorderThickness="1" Background="#FFFFFF" />

  <!-- RESTORE -->
  <Canvas x:Key="WindowButtonRestoreIcon">
    <Rectangle Stroke="#535666" Fill="White" Width="10" Height="10" Canvas.Top="1" Canvas.Left="7" />
    <Rectangle Stroke="#535666" Fill="White" Width="4" Height="4" Canvas.Top="4" Canvas.Left="10" />
    <Rectangle Stroke="#535666" Fill="White" Width="10" Height="10" Canvas.Top="3" Canvas.Left="5" />
    <Rectangle Stroke="#535666" Fill="White" Width="4" Height="4" Canvas.Top="6" Canvas.Left="8" />
  </Canvas>

  <!-- RESTORE (disabled) -->
  <Canvas x:Key="WindowButtonRestoreIconDisabled">
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="10" Height="10" Canvas.Top="1" Canvas.Left="7" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="4" Height="4" Canvas.Top="4" Canvas.Left="10" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="10" Height="10" Canvas.Top="3" Canvas.Left="5" />
    <Rectangle Stroke="#9FA5B2" Fill="White" Width="4" Height="4" Canvas.Top="6" Canvas.Left="8" />
  </Canvas>

  <!-- MAXIMIZE -->
  <Border x:Key="WindowButtonMaximizeIcon" BorderBrush="#535666" BorderThickness="1" Width="12" Height="10">
    <Border BorderBrush="#FCFCFC" BorderThickness="2">
      <Border BorderBrush="#535666" BorderThickness="1" />
    </Border>
  </Border>


  <!-- MAXIMIZE (disabled) -->
  <Border x:Key="WindowButtonMaximizeIconDisabled" BorderBrush="#9FA5B2" BorderThickness="1" Width="12" Height="10">
    <Border BorderBrush="#FCFCFC" BorderThickness="2">
      <Border BorderBrush="#9FA5B2" BorderThickness="1" />
    </Border>
  </Border>

  <!-- CLOSE -->
  <Image Source="/CustomWindow;component/Images/buttonX.png" Width="13" Height="10" x:Key="WindowButtonCloseIcon" />

  <!-- Background colors for red button (e.g close button) -->
  <LinearGradientBrush x:Key="RedButtonBackground" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Offset="0" Color="#F89C8C" />
    <GradientStop Offset="0.45" Color="#D47F75" />
    <GradientStop Offset="0.45" Color="#C04C3C" />
    <GradientStop Offset="1" Color="#C98172" />
  </LinearGradientBrush>

  <LinearGradientBrush x:Key="RedButtonMouseOverBackground" StartPoint="0,0" EndPoint="0,1">
    <GradientStop Offset="0" Color="#F89C8C" />
    <GradientStop Offset="0.45" Color="#E36A53" />
    <GradientStop Offset="0.45" Color="#C72B0E" />
    <GradientStop Offset="0.75" Color="#D44310" />
    <GradientStop Offset="1" Color="#F5E478" />
  </LinearGradientBrush>

</ResourceDictionary>

您必须开始修改xaml。你可能想从改变背景开始

这并不像我想的那么简单。起初,我认为您只需将所需的按钮更改为您创建的按钮。这里有点复杂。例如,使按钮看起来不同并不像更改按钮背景那样简单

您需要制作特定的控件模板,或将资源应用于项目、图像,并通过XAML分别制作更改图像设置的样式或模板

我做这件事的一种方法是添加一个图像,并根据图像制作一个自定义控件。不需要按钮或其他控件。然后,我为onclick创建了事件,在鼠标悬停等情况下,我有效地制作了一个小图像,看起来像一个按钮,就像一个按钮

需要注意的事项:

窗户,风格 窗口资源 模板


老实说,找到这些答案最简单的方法就是询问谷歌。你可以问任何问题,但一定要在最后加上WPF。这样,您只能找到WPF特定编码的答案,许多人的操作方式不同,但您会发现大量优秀的xaml示例,等等。

您必须开始修改xaml。你可能想从改变背景开始

<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>
这并不像我想的那么简单。起初,我认为您只需将所需的按钮更改为您创建的按钮。这里有点复杂。例如,使按钮看起来不同并不像更改按钮背景那样简单

您需要制作特定的控件模板,或将资源应用于项目、图像,并通过XAML分别制作更改图像设置的样式或模板

我做这件事的一种方法是添加一个图像,并根据图像制作一个自定义控件。不需要按钮或其他控件。然后,我为onclick创建了事件,在鼠标悬停等情况下,我有效地制作了一个小图像,看起来像一个按钮,就像一个按钮

需要注意的事项:

窗户,风格 窗口资源 模板

老实说,找到这些答案最简单的方法就是询问谷歌。你可以问任何问题,但一定要在最后加上WPF。这样,您只能找到WPF特定编码的答案,许多人的操作方式不同,但您会发现大量优秀的xaml示例,等等

<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>
您只需复制并通过上面的代码,就可以得到您想要的结果


您只需复制并通过上面的代码,就可以得到您想要的结果。

我已经看到它完成了。。。在Photoshop中。我对此表示怀疑。抱歉。@这是绝对可能的,而且非常常见。^我不知道。请继续…谷歌是你的朋友!将WPF添加到您的查询中,您会大吃一惊!我已经看过了。。。在Photoshop中。我对此表示怀疑。抱歉。@这是绝对可能的,而且非常常见。^我不知道。请继续…谷歌是你的朋友!将WPF添加到您的查询中,您会大吃一惊!这很好,但它或多或少只是在OP中抛出答案。当我不断地向大家重复时,不要从提问者的角度给出答案和代码,因为这样做没有动机。不一定要让人们为此付出太多的努力,但要给他们一个启动。这很好,但它或多或少只是在OP上抛出答案。当我不断地向人们重复时,不要只是从提问者的角度给出答案和代码,而显示出没有动机。不一定要让人们工作得太辛苦 我同意,但给他们一个开球。