2012-01-17 57 views
3

我爲ToggleButton創建了一個ContentTemplate和Style,它看起來像您從Microsoft的WebMatrix知道的那個。ToggleButton懸停並單擊行爲

但是,點擊並不總是可以的,懸停效果也不會顯示出來。 我發現當我將鼠標懸停在圖標或我的按鈕文本上時,會出現點擊/懸停區域。

Hover and click don't work

Hover and click work

一旦徘徊有可能要回到正確的用鼠標懸停並沒有消失(因爲它應該)。

下面的代碼的重要組成部分:

  <StackPanel.Resources> 
       <Style TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource NavigationButton}" /> 
      </StackPanel.Resources> 
      <ToggleButton x:Name="_btn_Buchungen" Click="_btn_Buchungen_Click"> 
       <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
        <Image Source="{StaticResource Buchungen}" Width="16" Height="16" /> 
        <TextBlock Text="Buchungen" /> 
       </StackPanel> 
      </ToggleButton> 

的控件模板和樣式:

<Style TargetType="{x:Type ToggleButton}" x:Key="NavigationButton"> 
      <Setter Property="Background" Value="{x:Null}" /> 
      <Setter Property="Height" Value="35" /> 
      <Setter Property="BorderBrush" Value="{x:Null}" /> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ToggleButton}"> 
         <Border Name="OuterBorder" BorderThickness="0,1,0,0" > 
          <Border Name="InnerBorder" BorderThickness="0,1,0,1" > 
           <ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center"/> 
          </Border> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="true"> 
           <Setter Property="Style" TargetName="InnerBorder" Value="{StaticResource ButtonInnerBHover}" /> 
           <Setter Property="Style" TargetName="OuterBorder" Value="{StaticResource ButtonOuterBHover}" /> 
          </Trigger> 
          <Trigger Property="IsChecked" Value="true"> 
           <Setter Property="Style" TargetName="InnerBorder" Value="{StaticResource ButtonInnerBHover}" /> 
           <Setter Property="Style" TargetName="OuterBorder" Value="{StaticResource ButtonOuterBHover}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Resources> 
       <Style TargetType="{x:Type TextBlock}"> 
        <Setter Property="TextAlignment" Value="Left" /> 
        <Setter Property="Margin" Value="10, 0,0,0" /> 
        <Setter Property="Effect"> 
         <Setter.Value> 
          <DropShadowEffect BlurRadius="1" Direction="270" ShadowDepth="1" Color="White" /> 
         </Setter.Value> 
        </Setter> 
       </Style> 
       <Style TargetType="{x:Type StackPanel}"> 
        <Setter Property="Margin" Value="20,0,0,0" /> 
       </Style> 
      </Style.Resources> 
     </Style> 

,當你切換按鈕的懸停應顯示鼠標移動到按鈕本身的整個寬度和也應該是可點擊的。

我試着用不同的屬性修復它,如水平拉伸和IsHitTestVisible,但我還沒有得到它。 有什麼想法?

已經看到這個線程,並嘗試與解決方案不同的東西,但無法弄清楚。 Problem with the mouse click on toggleButton in WPF

回答

4

將模板中最外層控件的Background設置爲Transparent,這樣無論內容是什麼,都應該進行命中測試。

+0

似乎你是某種主謀。它像一種魅力,它永遠不會發生在我身上。 –

+0

是的,使用'{x:Null}'進行命中測試確實很奇怪,我儘量避免使用它! – Kolky

+1

@Kolky:我不會說這很奇怪,它根本就沒有打擊測試。 –