2010-02-26 45 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