2012-06-22 9 views
7

Tôi gặp sự cố khi đặt HighlightBrushKey trong số SelectedItem trong số Listbox trong WPF. Ý định của tôi là thiết lập màu sắc của một Item tùy thuộc vào một giá trị Boolean đã cho, nằm trong mã.WPF Thay đổi ListboxItem Tô sáng màu khi được chọn

Tôi đã thử các bước sau:

  • Thực hiện một chuyển đổi, kiểm tra boolean và trở về đúng màu.

    Ví dụ:

    <ribbon:RibbonWindow.Resources> 
        <l:WindowControl x:Key="ListBoxItemBackgroundConverter" /> 
        <Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}"> 
         <Style.Resources> 
         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={x:Static SystemColors.HighlightBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> 
         <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{Binding Source={x:Static SystemColors.ControlBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> 
         </Style.Resources> 
        </Style> 
    </ribbon:RibbonWindow.Resources> 
    

    Vấn đề ở đây là các phương pháp Chuyển đổi được gọi là chỉ một lần, nhưng tôi cần những Converter để được gọi mỗi khi tôi chọn một mục và kiểm tra Boolean. Giống như Trình kích hoạt, nhưng với "HighlightBrushKey".

    Chuyển đổi:

    public object Convert(object value, Type targetType, 
             object parameter, CultureInfo culture) 
    { 
        if(currentField == null) 
         return Brushes.Yellow; 
        if (currentField.Save) 
         return Brushes.LightGreen; 
        else 
         return Brushes.Yellow; 
    } 
    
  • ý tưởng tiếp theo của tôi đã được thiết lập "HighlightBrushKey" thành "Transparent" và thay đổi item.Background bằng tay trong mã. Vấn đề ở đây là các mặt hàng của tôi trở nên trắng và màu nền không thể được nhìn thấy

    Ví dụ:

    <ListBox.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> 
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
    </ListBox.Resources> 
    

Cảm ơn trước! :)

+2

Câu hỏi đầu tiên hay Andy, được xây dựng với các ví dụ chính xác về những gì bạn đang cố làm nổi bật! +1 – ThePower

+0

@Andy CurrentField1 trong bộ chuyển đổi của bạn là gì? Làm thế nào bạn nhận được điều này trong Converter? Bạn có thể thử ràng buộc với 'currentField' (tức là YourViewModelProperty) trong kiểu vô hình được cung cấp không. – akjoshi

+0

currentField là một đối tượng. Tên lớp là Trường và có Thuộc tính Boolean có tên "Lưu". làm thế nào tôi có thể liên kết với nó trong XAML? – Andy

Trả lời

1
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBox}"> 
    <Style.Resources> 
     <!-- Background of selected item when focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" /> 
     <!-- Background of selected item when not focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" /> 
    </Style.Resources> 
</Style> 

<ListBox Style="{StaticResource listBoxStyle}"> 
</ListBox> 
+0

cảm ơn cho câu trả lời của bạn, nhưng điều này không giải quyết vấn đề của tôi. Tôi biết những dòng này, nhưng tôi có một sự phụ thuộc hiện tại giữa màu sắc (ví dụ của bạn: color = "Red") và một giá trị Boolean currentField.Save, một đối tượng trong thời gian chạy. Nếu nó là sai, thì màu sắc sẽ là màu vàng và nếu nó là đúng, màu sắc nên được màu xanh lá cây. – Andy