2012-06-22 17 views
7

WPF'de Listbox'un SelectedItem'unun HighlightBrushKey ayarıyla ilgili bir sorunum var. Amacım, bir Öğenin rengini, kodda yatan belirli bir Boole değerine bağlı olarak ayarlamaktı.WPF ListboxItem Değiştirme Seçildiğinde Rengi Vurgulayın

denedim aşağıdaki adımlar:

  • , bir dönüştürücü uygulanması boolean denetleme ve doğru rengi dönen.

    Örnek:

    <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> 
    

    sorun burada dönüştürme yöntemi yalnızca bir kez adını taşıdığını, ama Dönüştürücü ben bir öğe ve Boole kontrol seçmek her zaman çağrılacak gerekir. Bir Tetik gibi, ama "HighlightBrushKey" ile.

    Dönüştürücü:

    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; 
    } 
    
  • Bir sonraki fikir "HighlightBrushKey" ayara "Transparent" ve kod elle item.Background değişiyordu. Sorun burada eşyaları beyaz haline geldiğini ve Arka Plan Rengi

    Örnek görülemezdim: peşin

    <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> 
    

teşekkürler! :)

+2

Güzel ilk soru Andy, vurgulamaya çalıştığınız tam olarak kesin örneklerle inşa edilmiş! +1 – ThePower

+0

@Andy Dönüştürücünüzde currentField1 nedir? Bunu Dönüştürücüye nasıl alıyorsunuz? Sağlanan stilde "currentField" (yani YourViewModelProperty) öğesine bağlanmayı deneyebilirsiniz. – akjoshi

+0

currentField bir nesnedir. Sınıf adı Alan'dır ve "Kaydet" adlı bir Boole Özelliğine sahiptir. XAML'de buna nasıl bağlanabilirim? – Andy

cevap

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

'unuzu kontrol eden bir multivalueconverter'e ihtiyaç duyduğunuz gibi, cevabınız için teşekkürler, fakat bu benim problemimi çözmüyor. Bu satırları biliyorum, ancak renk (örneğin: color = "Kırmızı") ve çalışma zamanında bir nesne olan bir Boole değeri currentField.Save arasında var olan bir bağımlılığım var. Eğer yanlış ise, renk sarı olmalı ve eğer doğruysa, renk yeşil olmalıdır. – Andy

İlgili konular