gpt4 book ai didi

WPF,XAML : How to style a ListBoxItem using binding on property of ListBox ItemsSource object?

转载 作者:行者123 更新时间:2023-12-03 14:38:29 27 4
gpt4 key购买 nike

我有一个绑定(bind)到 LogMessages 的 ObservableCollection 的 ListBox。

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

ListBox 被这些项目填满了,我需要 颜色代码 (更改 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 是因为 message 的 Severity 参数是 Int (0..3) 类型,我们可以使用它轻松地在样式之间切换。

这个概念很清楚,但到目前为止它对我不起作用。 ListBoxItem 的背景颜色没有改变。

最佳答案

使用ItemContainerStyle :

<ListBox ItemsSource="{Binding LogMessages}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Background" Value="{Binding Severity, Converter={StaticResource YourBackgroundConverter}}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>

关于WPF,XAML : How to style a ListBoxItem using binding on property of ListBox ItemsSource object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com