如何更改标题栏按钮 WPF C#
How to Change Titlebar Buttons WPF C#
我想对 window 标题栏中的关闭、最小化和最大化按钮进行自定义。在某些程序中,标题栏不同,但我不想更改整个标题栏,只更改按钮。谁能帮我解决这个问题?
一般来说,window的标题栏属于window的so-callednon-client区域。
这意味着您 不能 更改按钮的外观,也不能添加自定义按钮等。
要做到这一点,您需要推出自己的 window 风格或使用可以为您做到这一点的库。
一些有用的教程或起点可能是 this MSDN article or this tutorial on how to create a custom window。
要创建自己的 window 样式,您可以使用这个简单的样式作为基础:
<Style x:Key="MyCustomWindowStyle" TargetType="{x:Type Window}">
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="AllowsTransparency" Value="True"/>
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- this displays the window title -->
<TextBlock TextAlignment="Center"
Text="{TemplateBinding Title}"/>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Stretch"
VerticalAlignment="Center">
<!-- the minimize button, using your own style -->
<Button Style="{StaticResource MyMinimizeButtonStyle}"
Width="20"
Height="20" />
<!-- the close button, using your own style -->
<Button Style="{StaticResource MyCloseButtonStyle}"
Width="20"
Height="20" />
</StackPanel>
<!-- this displays the actual window content -->
<ContentPresenter Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可以使用 windowchrome 自定义 windows 的 chrome。
https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome(v=vs.110).aspx
您可以使用它完全 re-template 您的 window。
请注意,class 自以下内容编写以来已移动。
https://blogs.msdn.microsoft.com/wpfsdk/2010/08/25/experiments-with-windowchrome/
这可能会产生奇怪的副作用,例如当您在 win10 中最大化 window 时。
您可以使用 WindowChrome 自定义 window 样式:https://github.com/DinoChan/WindowDemo
此样式不使用 SystemParameters2 class 因为它在 .net 4.5 中不存在。
我想对 window 标题栏中的关闭、最小化和最大化按钮进行自定义。在某些程序中,标题栏不同,但我不想更改整个标题栏,只更改按钮。谁能帮我解决这个问题?
一般来说,window的标题栏属于window的so-callednon-client区域。 这意味着您 不能 更改按钮的外观,也不能添加自定义按钮等。
要做到这一点,您需要推出自己的 window 风格或使用可以为您做到这一点的库。
一些有用的教程或起点可能是 this MSDN article or this tutorial on how to create a custom window。
要创建自己的 window 样式,您可以使用这个简单的样式作为基础:
<Style x:Key="MyCustomWindowStyle" TargetType="{x:Type Window}">
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="AllowsTransparency" Value="True"/>
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- this displays the window title -->
<TextBlock TextAlignment="Center"
Text="{TemplateBinding Title}"/>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Stretch"
VerticalAlignment="Center">
<!-- the minimize button, using your own style -->
<Button Style="{StaticResource MyMinimizeButtonStyle}"
Width="20"
Height="20" />
<!-- the close button, using your own style -->
<Button Style="{StaticResource MyCloseButtonStyle}"
Width="20"
Height="20" />
</StackPanel>
<!-- this displays the actual window content -->
<ContentPresenter Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您可以使用 windowchrome 自定义 windows 的 chrome。 https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome(v=vs.110).aspx
您可以使用它完全 re-template 您的 window。 请注意,class 自以下内容编写以来已移动。 https://blogs.msdn.microsoft.com/wpfsdk/2010/08/25/experiments-with-windowchrome/
这可能会产生奇怪的副作用,例如当您在 win10 中最大化 window 时。
您可以使用 WindowChrome 自定义 window 样式:https://github.com/DinoChan/WindowDemo
此样式不使用 SystemParameters2 class 因为它在 .net 4.5 中不存在。