我有一個ListBox綁定到LogMessages的ObservableCollection。WPF,XAML:如何使用ListBox ItemsSource對象的屬性上的綁定來設置ListBoxItem的樣式?
public ObservableCollection<LogMessage> LogMessages { get; set; }
public LogMessageData()
{
this.LogMessages = new ObservableCollection<LogMessage>();
}
每個消息有兩個參數:
public class LogMessage
{
public string Msg { get; set; }
public int Severity { get; set; }
//code cut...
}
列表框是越來越填充有那些項目,並且我需要顏色編碼(改變背景顏色的 ListBoxItem的)列表取決於LogMessage項目的嚴重性參數。
這就是我現在在XAML顯示日誌用戶控件:
<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>
和實際列表框:
<ListBox IsSynchronizedWithCurrentItem="True"
ItemTemplate="{DynamicResource LogDataTemplate}"
ItemsSource="{Binding LogFacility.LogMessages}"
x:Name="logListBox" Grid.Row="1"
ItemContainerStyle="{StaticResource BindingAlternation}" />
的AlternationConverter被使用,因爲消息的嚴重性參數的類型的Int(0..3),我們可以輕鬆地在使用那個樣式的樣式之間切換。
這個概念很清楚,但到目前爲止它不適用於我。 ListBoxItem的背景顏色沒有改變。
我的預感是,這與{RelativeSource TemplatedParent}有關。調試應用程序時,在輸出窗口中是否有任何綁定錯誤? – 2009-08-20 10:30:34
沒有綁定錯誤,但不幸的是你是對的,這與我試圖引用的對象無關。奇怪的是輸出窗口沒有綁定錯誤。 – 2009-08-20 10:54:05