为什么在包含复选框的WPF列表框中不显示复选框?

xdyibdwo  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(191)

我正在使用AvaloniaUI(WPF)构建一个带有列表框的简单表单。我希望列表框中的每个项目都有一个复选框。列表框中的值是硬连接的。文本按预期显示。我无法使每个列表框项目都显示复选框。

这里是我的Listbox定义的示例代码片段。

<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 Content="One" />
        <ListBoxItem Content="Two" />
        <ListBoxItem Content="Three" />
    </ListBox>
</DockPanel>

为什么不显示复选框?

hs1rzwqc

hs1rzwqc1#

直接添加ListBoxItems时不应用ItemTemplate。
将其更改为String s应该可以:

<sys:String>One</sys:String>
<sys:String>Two</sys:String>
<sys:String>Three</sys:String>

您可能还需要添加sys的命名空间。

7xzttuei

7xzttuei2#

为什么不显示复选框?
因为ItemTemplate不适用于ListBoxItem元素。
按照@AndrewKeepCoding的建议,将项目的类型更改为其他类型,或者使用DataTemplate作为显式创建的ListBoxItem元素的ContentTemplate

<ListBox x:Name="Test"
         DockPanel.Dock="Top">
    <ListBox.Resources>
        <DataTemplate x:Key="template">
            <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.Resources>
    <ListBoxItem Content="One" ContentTemplate="{StaticResource template}" />
    <ListBoxItem Content="Two" ContentTemplate="{StaticResource template}" />
    <ListBoxItem Content="Three" ContentTemplate="{StaticResource template}" />
</ListBox>

相关问题