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

时间:2016-12-27 01:58:51

标签: c# wpf wpf-controls

我遇到以下基于形状的控制模板

的问题
<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")。如果未设置background,则会触发click事件。

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

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

2 个答案:

答案 0 :(得分:0)

您创建的按钮错误。如果将背景设置为白色,并且如果未在别处定义Ellipse绑定的模板绑定,则WPF将不会对您的自定义按钮执行命中测试。请检查TemplateBinding绑定,这是不正确的。

答案 1 :(得分:0)

我发现了问题所在。我错误地在触发部分设置背景。我应该设置椭圆的填充属性,而不是将背景设置为按钮:

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