如何在使用自定义窗口镶边时向 WPF 标题栏添加按钮?

问题描述 投票:0回答:2

我正在尝试创建一个简单的按钮模板,其中按钮通常看起来像一条水平线,但是当鼠标悬停在按钮上时,按钮后面会显示一个“矩形”颜色填充。 这是我的代码,但我似乎无法触发触发器。

<Window x:Class="TestStylingWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="36" GlassFrameThickness="0 0 0 1" ResizeBorderThickness="5" />
    </WindowChrome.WindowChrome>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="36" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Button Height="36" Width="36" 
                    HorizontalAlignment="Center" VerticalAlignment="Center"
                Grid.Row="0">
            <Button.Template>
                <ControlTemplate>
                    <Grid>
                        <Rectangle x:Name="PART_ButtonBackgroundRectangle" Fill="LightGray" Width="36" Height="36" Opacity="0" />
                        <Path x:Name="PART_ButtonPath" Data="M10,26 L26,26" Stroke="DarkGray" StrokeThickness="1.5" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger SourceName="PART_ButtonBackgroundRectangle" Property="IsMouseOver" Value="True">
                            <Setter TargetName="PART_ButtonBackgroundRectangle" Property="Opacity" Value="1" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>
</Window>

有谁知道为什么我的触发器不起作用,或者也许有更好的方法来做到这一点?我对 WPF 有点陌生,想重构它(以便在许多按钮中使用它),但不确定如何做。

更新:好的,所以我想这似乎是因为该按钮位于窗口的标题栏中。 有没有好的办法解决这个问题? 也许有一种方法可以设置按钮的点击/悬停优先级?

c# wpf xaml
2个回答
19
投票

您需要设置按钮的Hittest可见,例如:

shell:WindowChrome.IsHitTestVisibleInChrome="True"

0
投票

为了澄清之前的答案,您需要在按钮本身上设置

IsHitTestVisibleInChrome="True"
(而不是在窗口上,就像我一开始错误地认为的那样)

例如:

<Button Content="x" 
        Click="CloseButton_Click" 
        WindowChrome.IsHitTestVisibleInChrome="True">
</Button>

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.