2016-06-29 135 views
0

下面的xaml將不起作用,因爲對於ListBoxItem,BacckGround表示TextBlock下的顏色。如何在鼠標懸停時更改WPF TextBlock ListBoxItem的背景顏色?

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem">      
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="{DynamicResource Theme.Button.Background.Hover}" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding}" 
      Background="{DynamicResource Theme.Button.Background}" 
      Foreground="{DynamicResource Theme.Button.Foreground}" 
      Padding="{DynamicResource Theme.Button.Padding}"/> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

對於請求我在這裏添加我的實際代碼(SelectButton可以在這裏找到https://gist.github.com/loraderon/580405):

<cntrls:SelectButton x:Name="Insert_BtnStartPolyline" Grid.Row="3" ItemsSource="{Binding Path=InsertLineItemsSource}" Command="{ui:CommandHandler OpenVersion}" HorizontalAlignment="Left" MinWidth="100"> 
     <cntrls:SelectButton.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
      </Style> 
     </cntrls:SelectButton.ItemContainerStyle> 
     <cntrls:SelectButton.Resources> 
      <Style TargetType="TextBlock"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Chartreuse" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </cntrls:SelectButton.Resources> 
     <cntrls:SelectButton.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}" 
          Background="{DynamicResource Theme.Button.Background}" 
          Foreground="{DynamicResource Theme.Button.Foreground}" 
          Padding="{DynamicResource Theme.Button.Padding}" 
          HorizontalAlignment="Stretch"/> 
      </DataTemplate> 
     </cntrls:SelectButton.ItemTemplate> 

    </cntrls:SelectButton> 
+0

什麼TextBlock的... –

+0

爲什麼不給TextBlock的透明背景,並設置在ListBoxItem的樣式默認的背景是什麼?或者將鼠標懸停觸發器置於TextBlock中的樣式上? –

+0

@ H.B。 :我更新了問題 –

回答

1

貌似正確的答案是這樣的。我不明白爲什麼在cntrls中定義TextBlock樣式:SelectButton.Resources失敗,但我們不需要這樣做。

這裏的關鍵是設置上TextBlock在屬性的默認Background,但在Style而在Setter。這是因爲,通過設計,屬性可以覆蓋任何風格。這實際上是一件好事(一旦你知道它!),因爲它可以讓你明確地覆蓋控件特定實例的樣式。

<DataTemplate> 
    <TextBlock 
     Text="{Binding}" 
     Foreground="{DynamicResource Theme.Button.Foreground}" 
     Padding="{DynamicResource Theme.Button.Padding}" 
     HorizontalAlignment="Stretch" 
     > 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Setter Property="Background" Value="{DynamicResource Theme.Button.Background}" /> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="Chartreuse" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</DataTemplate> 
+0

謝謝!與SelectButton相關的最終問題還在後面:) –

相關問題