我遇到以下基于形状的控制模板:
的问题<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属性?
答案 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>
...