2016-07-29 42 views
1

我使用DataTemplate來顯示一些帶有自定義視圖(包括圖像,文本等)的按鈕。下面是一個簡單的例子:DataTemplate中按鈕的MouseOver效果

<DataTemplate DataType="{x:Type viewModel:ActionItem}"> 

    <Button Background="SlateGray" Command="{Binding Command}"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Background" Value="Green"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
          <Border Background="{TemplateBinding Background}"> 
           <ContentPresenter /> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="DarkGoldenrod"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 

     <TextBlock Text="{Binding Name}" /> 

    </Button> 

</DataTemplate> 

爲什麼鼠標移到效果不工作?

+0

@ S.Akbari:在相關的答案告訴編譯器使用一個控制模板,我已經這樣做了。 – nabulke

回答

2

因爲Background="SlateGray"會覆蓋任何可以在樣式中觸發的內容。刪除那一點,它應該工作。

+0

不應該是這種情況bcos當觸發器觸發它暫時覆蓋當前控制風格與任何你在觸發器中設置 – suulisin

+0

@Pamparanpa它沒有在控制風格中設置,DP是直接設置 - 自己測試,如果你不相信我。順便說一句:你的工作原因不一樣。 –

+0

@Manfred:你說得對,現在感覺很傻...謝謝你的幫助。 – nabulke

0

請設置觸發模板級像

<DataTemplate DataType="{x:Type viewModel:ActionItem}"> 

    <Button Background="SlateGray" Command="{Binding Command}"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Background" Value="Green"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type Button}"> 
          <Border Background="{TemplateBinding Background}"> 
           <ContentPresenter /> 
          </Border> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="DarkGoldenrod"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 

      </Style> 
     </Button.Style> 

     <TextBlock Text="{Binding Name}" /> 

    </Button> 

</DataTemplate>