侧边栏壁纸
  • 累计撰写 86 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
WPF

ListBox简单示例

祈安千
2026-01-29 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

Why

  • 以前是个菜鸡(虽然现在也是),还记得之前问如果ChatGPT,如果我有个listbox显示日志,我需要将不同的日志类型显示不同的前景色应该怎么做,它当时说让我自定义控件,无法做到,我当时也没多想就觉得不好做,现在早上突然一下子醒悟过来了应该怎么做,可能还是WPF的基础不够扎实,走了很多弯路。

How

  • 定义好数据类型
public partial class MainViewModel : ObservableObject
{
    public MainViewModel()
    {
        var random = new Random();

        for (int i = 0; i < 100; i++)
        {

            var log = new LogInfo()
            {
                LogMessage = $"Log message {i}",
                LogType = (LogType)(random.Next(4))
            };
            _logInfos.Add(log);
        }


    }


    [ObservableProperty]
    private ObservableCollection<LogInfo> _logInfos = [];

}


public partial class LogInfo : ObservableObject
{
    public LogInfo()
    {

    }
    [ObservableProperty]
    private string _logMessage;
    [ObservableProperty]
    private LogType _logType = LogType.Debug;
}

public enum LogType
{
    Debug,
    Info,
    Warning,
    Error,
}
  • XAML中使用如下
<ListBox Grid.Row="1" ItemsSource="{Binding LogInfos, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <TextBlock Text="{Binding LogMessage}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding LogType}" Value="{x:Static local:LogType.Debug}">
                    <Setter Property="Foreground" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LogType}" Value="{x:Static local:LogType.Warning}">
                    <Setter Property="Foreground" Value="LightPink" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LogType}" Value="{x:Static local:LogType.Info}">
                    <Setter Property="Foreground" Value="Yellow" />
                </DataTrigger>
                <DataTrigger Binding="{Binding LogType}" Value="{x:Static local:LogType.Error}">
                    <Setter Property="Foreground" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
  • 效果截图
    listbox_logs.png

Tips

  • 最近打算重新学一下WPF基础了,很多时候基础还是最重要的,不然也不至于这么简单的现在才反应过来。
0
博主关闭了所有页面的评论