wpf 做一个好看的标题栏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 做一个好看的标题栏?相关的知识,希望对你有一定的参考价值。

如图一是最终效果,想做个和图中一样的标题,怎么实现呢?最好能给直接能用的代码,用样式实现,不要贴图,谢谢

在 WPF 中,您可以使用自定义模板(Template)来创建一个好看的标题栏。以下是一个简单的示例,演示如何创建一个具有渐变背景和自定义按钮的标题栏:

<Window x:Class="MyWindow"

Title="My Window"

WindowStyle="None"

AllowsTransparency="True"

Background="Transparent">

<Window.Template>

<ControlTemplate TargetType="x:Type Window">

<Border BorderThickness="1"

BorderBrush="Gray"

CornerRadius="5">

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="30" />

<RowDefinition Height="*" />

</Grid.RowDefinitions>

<Border Grid.Row="0"

Background="#FF7F7F7F">

<StackPanel Orientation="Horizontal">

<TextBlock Text="TemplateBinding Title"

Margin="5,0,0,0"

VerticalAlignment="Center"

FontSize="14" />

<StackPanel Orientation="Horizontal"

Margin="5,0,0,0">

<Button Content="⚙"

Width="20"

Height="20"

Margin="5,0,0,0"

VerticalAlignment="Center"

HorizontalAlignment="Left"

Background="#FF7F7F7F"

BorderThickness="0"

Foreground="White"

FontSize="14"

ToolTip="Settings" />

<Button Content="❐"

Width="20"

Height="20"

Margin="5,0,0,0"

VerticalAlignment="Center"

HorizontalAlignment="Left"

Background="#FF7F7F7F"

BorderThickness="0"

Foreground="White"

FontSize="14"

ToolTip="Minimize"

Click="MinimizeButton_Click" />

<Button Content="❌"

Width="20"

Height="20"

Margin="5,0,0,0"

VerticalAlignment="Center"

HorizontalAlignment="Left"

Background="#FF7F7F7F"

BorderThickness="0"

Foreground="White"

FontSize="14"

ToolTip="Close"

Click="CloseButton_Click" />

</StackPanel>

</StackPanel>

</Border>

<Border Grid.Row="1"

Background="White">

<ContentPresenter />

</Border>

</Grid>

</Border>

</ControlTemplate>

</Window.Template>

</Window>

这个示例中,我们创建了一个 ControlTemplate,并将它的 TargetType 设置为 Window,然后在模板中定义了一个 Border,作为整个窗口的容器。然后,我们将 Grid 放置在 Border 中,以便我们可以将窗口分成两个部分:标题栏和内容部分。在标题栏中,我们使用了一个 StackPanel,其中包含一个 TextBlock 和三个 Button,用于显示窗口的标题、设置按钮、最小化按钮和关闭按钮。

我们使用了许多属性来定制标题栏的外观,包括颜色、大小、边框、字体大小等等。您可以根据自己的需要进行更改和修改。

参考技术A 您可以使用WPF中的Style来实现自定义标题栏。以下是一个简单的例子,使用了LinearGradientBrush和DropShadowEffect来实现深蓝色标题和阴影效果:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Style>
<Style TargetType="x:Type Window">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="30"
CornerRadius="0"
GlassFrameThickness="0"
NonClientFrameEdges="None"
ResizeBorderThickness="5"
UseAeroCaptionButtons="False" />
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type Window">
<Border Background="#2E5C87">
<Border.Effect>
<DropShadowEffect BlurRadius="5"
ShadowDepth="0"
Opacity="0.8" />
</Border.Effect>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#1C3E5E" />
<ContentPresenter Grid.Row="1" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Style>
<Grid>
<TextBlock Text="Hello, world!" />
</Grid>
</Window>
您可以根据自己的需求修改样式中的属性值,例如CaptionHeight、CornerRadius、Background等等。同时,您也可以在标题栏上添加按钮或其他控件,以实现更多的功能。
参考技术B blend 画啊 参考技术C 要做一个好看的WPF标题栏,可以考虑以下几个方面:
1. 使用自定义样式:WPF提供了许多控件的默认样式,但是这些样式可能不符合我们的需求。可以通过自定义样式来实现自己想要的效果。
2. 使用模板:WPF中的模板可以让我们完全控制控件的外观和行为。可以使用模板来自定义标题栏的样式。
3. 使用图标和背景:可以在标题栏中添加图标和背景,使其更加美观。
4. 使用动画效果:可以使用动画效果来增加标题栏的交互性和视觉效果。
5. 使用字体和颜色:可以使用不同的字体和颜色来增加标题栏的可读性和美观度。
6. 考虑不同的状态:在设计标题栏时,需要考虑不同的状态,如激活状态、非激活状态、最大化状态等,以确保标题栏在不同的情况下都能够呈现出最佳的效果。

[原创]c# wpf自定义 任意颜色阴影特效融合winform的探索之路

参考技术A 现在的需求需要高度定制,根据动态的配置生成动态的界面,所以网上一般的方式都是无法解决问题的。比如直接wpf控件拉进去使用的方式。
网上的资料太少,都是基于xml布局

做了一半项目发现winform没法实现阴影,结果发现wpf可以设置局部阴影,设置改变阴影颜色。
操作步骤,创建wpf用户控件,然后动态的添加到winform然后,插入一个画版 画板除了可以直接添加按钮外还可以添加一个矩形等等。

实现的效果如下

这里除了红色部分,其他地方全是通过 winform实现的。

以上是关于wpf 做一个好看的标题栏?的主要内容,如果未能解决你的问题,请参考以下文章

【WPF】自定义标题栏

C# WPF 建立无边框(标题栏)的登录窗口

有没有简单的方法来设置 WPF 状态栏文本?

WPF,从用户控件中更新主窗口中的状态栏

删除 WPF 窗口的标题栏文本但保留状态栏文本

[原创]c# wpf自定义 任意颜色阴影特效融合winform的探索之路