带有形状模板的按钮:设置背景时不会触发单击事件

Button with Shape Template: click event not fired when background is set

我在遵循基于形状的控制模板时遇到问题:

<ControlTemplate x:Key="EllipseButton" TargetType="{x:Type Button}">
    <Grid>
        <Ellipse Fill="{TemplateBinding Background}" />
        <ContentPresenter HorizontalAlignment="Center" 
                          VerticalAlignment="Center"
                          />
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter Property="Background" Value="Navy" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

问题是,当按钮的 背景 属性 已设置 时,按钮 不会生成点击事件 (请参阅 Background="White").如果未设置背景,则会触发点击事件。

<Button x:Name="Button" 
                Content="Click" 
                VerticalAlignment="Top" HorizontalAlignment="Left" 
                Template="{StaticResource EllipseButton}"
                Background="White" <-- PROBLEMATIC PROPERTY
                />

如何在不丢失点击事件的情况下安全地将 Button.Background 属性 绑定到 Elipse.Fill 属性?

您创建的按钮有误。如果您将背景设置为白色,并且没有在其他地方定义 Ellipse 绑定的模板绑定,则 WPF 不会对您的自定义按钮进行点击测试。请检查 TemplateBinding 绑定,它不正确。

我知道问题出在哪里了。我 在触发器部分 中错误地设置了背景。我应该设置椭圆的填充 属性,而不是将背景设置为按钮:

    ...
    <Ellipse Name="Ellipse" Fill="{TemplateBinding Background}" />
    ...
    <Trigger Property="IsPressed" Value="True">
        <Setter TargetName="Ellipse" Property="Fill" Value="Navy" />
    </Trigger>
    ...