2014-05-23 60 views
0

與使用默認高光筆相反,我希望所選列表框項目的顏色與文本框中選定文本的顏色相同。我認爲這將是一個x:引用,但是如果我需要在控件模板觸發器級別內部執行此操作,那麼會怎樣呢?如何將文本框的SelectionBrush屬性應用於列表框項目?

<Style x:Key="{x:Type ListBoxItem}" TargetType="ListBoxItem"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="OverridesDefaultStyle" Value="true"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
       <Border Name="Border" Padding="2" SnapsToDevicePixels="true"> 
        <ContentPresenter /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="Border" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

被選擇的觸發器的設置值是我想使其等於文本選擇畫筆。

回答

1

正如我所見,你幾乎就在那裏。通過TextBoxBase.SelectionOpacity屬性來看,默認Opacity供選擇畫筆是0.4,所以我們要效仿的是:

<Trigger Property="IsSelected" Value="True"> 
    <Setter TargetName="Border" Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" 
          Opacity="0.4" /> 
     </Setter.Value>         
    </Setter> 
</Trigger> 

我測試了它,它看起來酷似所選文本背景TextBox

+0

這是有效的。不透明度也可以變得動態嗎?我的實際目標是從TextBoxBase中獲取兩個屬性...... – thor2k

+0

好吧,顏色並不完全來自'TextBox',它只是'TextBox'在內部用作默認顏色的資源。不透明度甚至不是資源,只是默認內部設置的一個數值,所以我不認爲這是一個簡單的方法來引用它。 – icebat

相關問題