2010-02-26 47 views
6

我是WPF空间的相对初学者,所以我敢肯定这将是许多问题中的第一个!WPF切换按钮与自定义模板不接受点击在正确的区域

我有一系列切换按钮都带有一个自定义模板,用于显示具有透明背景的图像,然后在用户切换按钮时该图像将变为高亮显示。 我想在内容周围添加填充以便突出显示的区域围绕内容扩展。 这是工作,但用户仍然需要点击内部区域来激活按钮,这不是我想要的。

我假设这是因为我使用ContentPresenter的Margin属性来绑定到按钮的填充,这被归类为内容之外,但不知道解决这个问题的最佳方法。 虽然取消选择按钮但它确实有效。

下面是一些XAML,显示应该能够直接复制并粘贴到XamlPad中的问题。

<Page.Resources> 
    <Style x:Key="ValidationToggleButton" TargetType="ToggleButton"> 
    <Setter Property="Padding" Value="5" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate > 
       <Grid Name="MainGrid"> 
        <Viewbox> 
         <ContentPresenter Margin="{TemplateBinding Padding}" 
           Content="{TemplateBinding Property=Button.Content}" /> 
        </Viewbox> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="ToggleButton.IsChecked" Value="True"> 
         <Setter TargetName="MainGrid" Property="Background" Value="#88FFFF55" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
</Page.Resources> 
<Grid> 
<GroupBox Grid.Column="0" Header="Validation" BorderBrush="#55BBE6" Margin="2" > 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <ToggleButton Grid.Column="0" Style="{StaticResource ValidationToggleButton}"> 
      CLICK 
     </ToggleButton> 
    </Grid> 
</GroupBox> 
</Grid> 

任何人都有任何想法我可以改正这一点?

回答

14

欢迎来到WPF世界:)。发生这种情况是因为...背景画笔。如果你没有设置它为空。这意味着它不适用于命中测试机制。快速修复此设置Background="Transparent"MainGrid。但更适合的方式来设置它通过样式:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Page.Resources> 
    <Style x:Key="ValidationToggleButton" TargetType="ToggleButton"> 
    <Setter Property="Padding" Value="5" /> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate > 
       <Grid Name="MainGrid" Background="{TemplateBinding Background}"> 
        <Viewbox> 
         <ContentPresenter Margin="{TemplateBinding Padding}" 
           Content="{TemplateBinding Property=Button.Content}" /> 
        </Viewbox> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="ToggleButton.IsChecked" Value="True"> 
         <Setter TargetName="MainGrid" Property="Background" Value="#88FFFF55" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
</Page.Resources> 
<Grid> 
<GroupBox Grid.Column="0" Header="Validation" BorderBrush="#55BBE6" Margin="2" > 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <ToggleButton Grid.Column="0" Style="{StaticResource ValidationToggleButton}"> 
      CLICK 
     </ToggleButton> 
    </Grid> 
</GroupBox> 
</Grid> 
</Page> 
+0

优秀,看起来像这样做的伎俩! 我当然在一分钟内发现WPF远离WinForms,这是肯定的。 – JonC 2010-02-26 09:14:27