我发现在WPF窗口上使用WindowChrome可以让我在窗口中的任何地方放置内容,这是一个很好的想法。现在我终于可以让标题栏与我的其他应用程序颜色相同。
但是,我仍然喜欢非样式窗口中显示的默认最小化/最大化/关闭按钮。
有什么方法可以使用WindowChrome设置我的Window样式但仍保留默认按钮?
<Style x:Key="MainWindow" TargetType="{x:Type Window}">
<Setter Property="WindowChrome.WindowChrome">
<Setter.Value>
<WindowChrome CaptionHeight="30" ResizeBorderThickness="5" />
</Setter.Value>
</Setter>
</Style>
<Window Style="{StaticResource MainWindow}">
<Grid Background="Black">
<MyContent />
</Grid>
</Window>
这会形成一个很大的黑色窗口(太棒了!),但没有任何最小/最大/关闭按钮,因为它们隐藏在Grid
后面(不太好)。但是按钮仍然是可点击的,所以它们显然在那里。
答案 0 :(得分:4)
有什么方法可以使用WindowChrome设置我的Window样式但仍保留默认按钮?
不,我不这么认为。您可以将GlassFrameThickness
属性设置为0
以禁用按钮,然后您将不得不创建自己的自定义属性。您可以参考以下项目中的一些示例:https://wpfwindow.codeplex.com/。
如果您需要Window 10样式字幕按钮,可以使用Segoe MDL2 Assets
字体系列:
<Style x:Key="CaptionButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="LayoutRoot" Background="Transparent" Width="44" Height="30">
<TextBlock x:Name="txt" Text="{TemplateBinding Content}" FontFamily="Segoe MDL2 Assets" FontSize="10"
Foreground="#999999" HorizontalAlignment="Center" VerticalAlignment="Center"
RenderOptions.ClearTypeHint="Auto" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="LayoutRoot" Property="Background" Value="#E5E5E5"/>
<Setter TargetName="txt" Property="Foreground" Value="#000000"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="MinimizeButtonStyle" TargetType="Button" BasedOn="{StaticResource CaptionButtonStyle}">
<Setter Property="Content" Value=""/>
</Style>
<Style x:Key="MaximizeButtonStyle" TargetType="Button" BasedOn="{StaticResource CaptionButtonStyle}">
<Setter Property="Content" Value=""/>
</Style>
<Style x:Key="RestoreButtonStyle" TargetType="Button" BasedOn="{StaticResource CaptionButtonStyle}">
<Setter Property="Content" Value=""/>
</Style>
答案 1 :(得分:2)
在Windows 10推出之前,您可以在外部$data = Array(["1","2"],["5"]);
$result = array_map('intval', array_reduce($data, 'array_merge', array()));
print_r($result);
添加Window.Template
属性来自定义Margin
。就像下面的代码一样。
Border
上面的代码执行以下操作:
<Window.Template>
<ControlTemplate TargetType="Window">
<Border Background="#3FFFFFFF">
<AdornerDecorator Margin="8 10 8 8">
<Border>
<ContentPresenter/>
</Border>
</AdornerDecorator>
</Border>
</ControlTemplate>
</Window.Template>
<WindowChrome.WindowChrome>
<WindowChrome UseAeroCaptionButtons="True" GlassFrameThickness="8 30 8 8"/>
</WindowChrome.WindowChrome>
使我们的控件显示在窗口上方没有客户区域。WindowChrome
属性设置为负数,例如Margin
。但是在Windows 10之后,尤其是Windows 10 Creators Update,您无法再显示具有可接受窗口样式的Windows默认按钮。它总会显示一个主题边框,丑陋!
0 -30 0 0
上面的代码可能适用于早期版本的Windows 10.我的意思是,不像创建者更新那样难看。