WPF:自定義ListBox的選擇樣式


首先介紹一種簡單地方法:就是通過自定義SystemColors類的參數來自定義WPF ListBox選擇顏色的,

SystemColors的HighlightBrushKey和HighlightTextBrushKey分別代表ListBoxItem被選中時文字和背景顏色,

沒有Highlight的BrushKey代表ListBox沒有焦點時的選中項文字和背景顏色,如下示例代碼:

<ListBox>

    <ListBox.Resources>

        <Style TargetType="ListBoxItem">

            <Style.Resources>

                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Pink"/>

                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Gray"/>

                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>

                <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Green"/>

            </Style.Resources>

        </Style>

    </ListBox.Resources>

    <ListBoxItem>AAA</ListBoxItem>

    <ListBoxItem>B</ListBoxItem>

    <ListBoxItem>ccc</ListBoxItem>

</ListBox>

 

這樣的話,ListBox選中顏色變成了這樣:

 

 

image

 

 

 

可是這種方法僅僅能改變統一的顏色,無法完成其他更多要求。

 

 

 

那么另一種更強大的方法就是在模板中定義。一種方法就是在控件模板中根據ListBoxItem的IsSelected屬性判斷是否被選中,然后利用WPF觸發器來設置被選中后的樣式。但是如果你的ListBox定義了數據模板的話你會發現數據模板是顯示在控件模板之上的,因此控件模板上的某些顯示元素會被數據模板蓋住,如果此類情況發生,那么只能在數據模板上添加選中后的元素設置。這里可以通過一個RelativeBinding = FindAncestor的綁定來尋找可視化樹中的ListBoxItem的IsSelected屬性來在數據模板中判斷ListBoxItem是否被選中,可參見“文件”選項卡中上傳的示例源碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM