如何在WPF ListBox中避免默认选择第一项?

10

我希望在应用程序加载时避免Listbox默认选择第一项。我尝试过使用

SelectedIndex= -1

但它不起作用。当 ListBox 加载时,我不想选择任何项,直到用户从 ListBox 中选择任何项目。

我已将 IsSynchronization 设置为 true,但将其设置为 false 也无法解决我的问题。尽管我必须始终将 IsSychronization 设置为 true,但这没关系。我在谷歌上搜过,但找不到任何相关的答案。

有人可以告诉我如何做吗?


我尝试了这样做,对我有效...<ListBox Canvas.Left="327" Canvas.Top="145" Height="100" Name="lstBx1" Width="120" SelectedIndex="-1" />当我将索引更改为0或1时,它会显示为已选择。 - SidPen
1
默认情况下没有选中任何项。IsSychronization是什么? - Clemens
抱歉,那是Listbox中的IsSynchronizedWithCurrentItem属性。 - Vjendra Gaorh
我已经尝试了SelectedIndex=-1,但它没有起作用。你确定它对你有效吗? - Vjendra Gaorh
2个回答

20
我曾经也遇到过这个问题。当我直接将 ListBox.ItemsSource 绑定到视图模型中的集合时,默认情况下没有任何选项被选中。
当我改用 CollectionViewSource 作为 ListBox.ItemsSource 后,突然第一项默认被选中了。
原来是由于 ListBox.IsSynchronizedWithCurrentItem 导致的。将其设置为
IsSynchronizedWithCurrentItem="False"

ListBox上恢复所需的默认行为,即默认情况下什么也不选。


0

将IsEnabled绑定到一个布尔值,该值将标记用户何时可以选择。列表框仍然可见但不可选择。这是我在登录期间必须启用标签的样式代码,但一旦操作停止,它就不再需要启用。

  <Style x:Key="LabelStyle" TargetType="{x:Type Label}">
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="Width" Value="70" />
        <Setter Property="Height" Value="28"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=LoginInProcess}" Value="True">
                <Setter Property="IsEnabled" Value="False" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=LoginInProcess}" Value="False">
                <Setter Property="IsEnabled" Value="True" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接