1

我正在尝试使用默认标题按钮和标题栏创建一个窗口,并且仍然能够在窗口镶边中放置任意内容;但是,我尝试过的所有解决方案都会在标题按钮的右侧留下大约 5 个单位的边距。这是一个基本示例:

<Window x:Class="SemiCustomWindowChrome.MainWindow"
    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"
    xmlns:local="clr-namespace:SemiCustomWindowChrome"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525" Name="Window">
<WindowChrome.WindowChrome>
    <WindowChrome UseAeroCaptionButtons="True" ResizeBorderThickness="5" GlassFrameThickness="1,28,1,1"/>
</WindowChrome.WindowChrome>
<Window.Template>
    <ControlTemplate>
        <AdornerDecorator>
            <ContentPresenter Content="{Binding ElementName=Window, Path=Content}"/>
        </AdornerDecorator>
    </ControlTemplate>
</Window.Template>
<Grid>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
        <Button Content="Click me daddy!" WindowChrome.IsHitTestVisibleInChrome="True" Height="28"/>
        <TextBlock Text="Custom Window Test" Margin="6.5"/>
    </StackPanel>
    <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" FontFamily="MS Calibri" FontWeight="ExtraLight" Text="Hello There"/>
</Grid>

上面的代码产生了这个

为了清楚起见,我想删除窗口镶边中标题按钮右侧的白色填充,以便窗口与其他窗口完全相同,唯一的区别是我可以将控件放在非客户区(窗口镀铬)。感谢所有帮助!

如果有更稳定的方法来使用不包括使用 WindowChrome 元素的 DWM,如果有人能给我一个例子,我将不胜感激。

4

1 回答 1

1
WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="0.5,28,0,0.5" NonClientFrameEdges="Right"/>
</WindowChrome.WindowChrome>
<Window.Template>
    <ControlTemplate>
        <ContentPresenter Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Content}"/>
    </ControlTemplate>
</Window.Template>

这花了很长时间才找到。本来我以为 WindowChrome 类只是完全坏掉了,而且在某种程度上是这样,但我还是设法使用了它。我想出的其他解决方案要复杂得多,最终,尝试使用 WindowChrome 似乎要容易得多。我将专门为 Windows 10 编写该类的修改版本,但在那之前,它是有效的。我希望这对某人有所帮助。

要使用此代码,只需将其放在窗口的 XAML 内容区域的顶部即可。

于 2017-06-14T19:59:50.723 回答