感谢吕毅,本文主要全是他的思路,哈哈哈。我这里就是简单的做个归纳总结,不讲原理,不讲思路。主打一个拿来主义。
感兴趣的朋友可以直接前往他的文章里看一下,讲的很细致,可以照着做一做。我应该是借鉴了很久了,但是一致都没有正经的整理过。
本文主要是为了贯彻落实拿来就用,能跑就行这两大政策方针,将政策落地。
原文中只是写了windows的title,我的话,日常使用过程中还需要个icon在里面,所以多加了个icon上去。不废话,看代码吧。
首先是页面部分,基本照抄,margin top 略微加了2个像素,看起来协调点:
<WindowChrome.WindowChrome>
<WindowChrome GlassFrameThickness="0 64 0 0" NonClientFrameEdges="Left,Bottom,Right" />
</WindowChrome.WindowChrome>
<Window.Template>
<ControlTemplate TargetType="Window">
<Border Padding="0 30 0 0">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
<Border Background="{TemplateBinding Background}" VerticalAlignment="Top" Height="30" Margin="0 -29 140 0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" Margin="4 0">
<!-- Image Control to show the window icon -->
<Image Source="{TemplateBinding Icon}" Width="16" Height="16" Margin="4,0"/>
<!-- TextBlock for the title -->
<TextBlock Foreground="Black" VerticalAlignment="Center" FontSize="12" Margin="0,2,0,0" Text="{TemplateBinding Title}" />
</StackPanel>
<!-- 这里可以搞点别的小东西 -->
</Grid>
</Border>
<ContentPresenter />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="WindowState" Value="Maximized">
<Setter TargetName="RootGrid" Property="Margin" Value="6" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Template>
然后是xaml.cs部分, 如果icon图标未指定的话,从ApplicatonIcon里读一下:
public MainWindow()
{
InitializeComponent();
if (Icon == null)
{
string iconPath = System.Windows.Forms.Application.ExecutablePath;
Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(iconPath);
if (icon != null)
{
// 创建 BitmapSource
BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
// 将 BitmapSource 设置为 Icon
this.Icon = bitmapSource;
}
}
}
标签:bitmapSource,自定义,BitmapSource,标题栏,System,iconPath,WPF,icon,Icon
From: https://blog.csdn.net/wynneira/article/details/141257719