You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AvaloniaUI(WPF)中ListBox内复选框不显示的问题咨询

问题原因及解决方案

问题原因

你直接往ListBox里添加了ListBoxItem实例,这种情况下ListBox会把这些ListBoxItem当作现成的UI容器使用,不会触发ItemTemplate的渲染逻辑——ItemTemplate是用来渲染非UI类型的数据对象(比如字符串、自定义实体类)的,所以你的复选框模板根本没被用上,自然看不到复选框。

解决方案

给你三种可行的修改方式:

方式1:直接添加数据项(推荐)

去掉外层的ListBoxItem,直接放字符串内容,让ItemTemplate接管渲染:

<DockPanel>
    <ListBox x:Name="Test"
              DockPanel.Dock="Top">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel Margin="-10, 0, 0, 0">
                    <CheckBox DockPanel.Dock="Left" 
                              IsChecked="True" />
                    <TextBlock DockPanel.Dock="Left"
                               Margin="5, 0, 0, 0"
                               TextTrimming="WordEllipsis"
                               VerticalAlignment="Center"
                               Text="{Binding}" />
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <!-- 直接添加字符串,不用ListBoxItem包裹 -->
        <system:String>One</system:String>
        <system:String>Two</system:String>
        <system:String>Three</system:String>
    </ListBox>
</DockPanel>

注意要在XAML根节点添加命名空间:xmlns:system="clr-namespace:System;assembly=netstandard",才能直接使用system:String。

方式2:修改ListBoxItem的Content

如果一定要保留ListBoxItem,可以直接在它的Content里定义包含复选框的布局:

<DockPanel>
    <ListBox x:Name="Test"
              DockPanel.Dock="Top">
        <ListBoxItem>
            <DockPanel Margin="-10, 0, 0, 0">
                <CheckBox DockPanel.Dock="Left" 
                          IsChecked="True" />
                <TextBlock DockPanel.Dock="Left"
                           Margin="5, 0, 0, 0"
                           TextTrimming="WordEllipsis"
                           VerticalAlignment="Center"
                           Text="One" />
            </DockPanel>
        </ListBoxItem>
        <ListBoxItem>
            <DockPanel Margin="-10, 0, 0, 0">
                <CheckBox DockPanel.Dock="Left" 
                          IsChecked="True" />
                <TextBlock DockPanel.Dock="Left"
                           Margin="5, 0, 0, 0"
                           TextTrimming="WordEllipsis"
                           VerticalAlignment="Center"
                           Text="Two" />
            </DockPanel>
        </ListBoxItem>
        <ListBoxItem>
            <DockPanel Margin="-10, 0, 0, 0">
                <CheckBox DockPanel.Dock="Left" 
                          IsChecked="True" />
                <TextBlock DockPanel.Dock="Left"
                           Margin="5, 0, 0, 0"
                           TextTrimming="WordEllipsis"
                           VerticalAlignment="Center"
                           Text="Three" />
            </DockPanel>
        </ListBoxItem>
    </ListBox>
</DockPanel>

方式3:绑定ItemsSource(更符合MVVM)

把数据放到集合里,通过ItemsSource绑定,这也是Avalonia/WPF开发的常规做法:

<!-- XAML部分 -->
<DockPanel>
    <ListBox x:Name="Test"
              DockPanel.Dock="Top"
              ItemsSource="{Binding Items}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel Margin="-10, 0, 0, 0">
                    <CheckBox DockPanel.Dock="Left" 
                              IsChecked="True" />
                    <TextBlock DockPanel.Dock="Left"
                               Margin="5, 0, 0, 0"
                               TextTrimming="WordEllipsis"
                               VerticalAlignment="Center"
                               Text="{Binding}" />
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</DockPanel>
// 后台代码(ViewModel或代码隐藏)
public ObservableCollection<string> Items { get; } = new ObservableCollection<string>
{
    "One", "Two", "Three"
};

// 如果是代码隐藏,在构造函数里设置DataContext
public YourWindow()
{
    InitializeComponent();
    DataContext = this;
}

内容的提问来源于stack exchange,提问作者JohnB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:47:25