LogMessages'ın ObservableCollection'a bağlı bir ListBox'um var.WPF, XAML: Nasıl bir ListBoxItem ListBox ItemsSource nesnesinin özelliği üzerinde bağlayıcı kullanarak stili?
public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
this.LogMessages = new ObservableCollection<LogMessage>();
}
Her İleti iki parametresi vardır:
public class LogMessage
{
public string Msg { get; set; }
public int Severity { get; set; }
//code cut...
}
ListBox bu öğeler ile dolu oluyor ve ben renk kodu (değiştirmek arka plan rengi ait ListBoxItem) liste gerekir LogMessage öğesinin Severity parametresine bağlı olarak.
<UserControl.Resources>
<AlternationConverter x:Key="BackgroundSeverityConverter">
<SolidColorBrush>Green</SolidColorBrush>
<SolidColorBrush>Yellow</SolidColorBrush>
<SolidColorBrush>Red</SolidColorBrush>
</AlternationConverter>
<Style x:Key="BindingAlternation" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background"
Value="{Binding RelativeSource={RelativeSource TemplatedParent},
Path=Severity,
Converter={StaticResource BackgroundSeverityConverter}}"/>
</Style>
<DataTemplate x:Key="LogDataTemplate">
<TextBlock x:Name="logItemTextBlock" Width="Auto" Height="Auto"
Text="{Binding Msg}"/>
</DataTemplate>
</UserControl.Resources>
ve gerçek bir ListBox: Burada
Ben günlüğü gösteren kullanıcı denetiminin XAML şimdi ne var mesajın Şiddeti parametre tipidir çünkü AlternationConverter kullanılır<ListBox IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource LogDataTemplate}"
ItemsSource="{Binding LogFacility.LogMessages}"
x:Name="logListBox" Grid.Row="1"
ItemContainerStyle="{StaticResource BindingAlternation}" />
Int (0..3) ve bunu kullanarak stiller arasında kolayca geçiş yapabiliriz.
Kavram açık, ama şu ana kadar benim için çalışmıyor. ListBoxItem'in arka plan rengi değişmedi.
Önsezim, bunun {RelativeSource TemplatedParent} ile ilgili olması. Uygulamayı hata ayıkladığınızda çıktı penceresinde herhangi bir bağlantı hatası alıyor musunuz? –
Bağlama hataları yoktu, ancak maalesef haklısınız, bunun için başvurmaya çalıştığım nesne ile ilgisi yok. Çıktı penceresinde garip hata yok. –