ListBox始终自动选择第一项

时间:2009-09-09 09:42:54

标签: wpf listbox selecteditem

ListBox的行为是自动选择第一个项目,我该如何避免?

注意:我更喜欢使用纯xaml,如果你有任何代码隐藏的想法,那么请不要打扰自己。

9 个答案:

答案 0 :(得分:9)

尝试

IsSynchronizedWithCurrentItem="False"

答案 1 :(得分:6)

我使用FocusManager.FocusedElement来尝试这个,并将重点放在了 列表框本身..所以它有焦点..但没有选择任何元素.. 如果你按下或标签..将选择列表框的第一个元素...

<Window
  ...... 
  FocusManager.FocusedElement="{Binding ElementName=listbox2}">
    <ListBox x:Name="listbox2" HorizontalAlignment="Left"
        VerticalAlignment="Bottom" Width="117.333" Height="116" 
        Margin="30.667,0,0,30">
        <ListBoxItem>Jim</ListBoxItem>
        <ListBoxItem>Mark</ListBoxItem>
        <ListBoxItem>Mandy</ListBoxItem>
</ListBox>

答案 2 :(得分:5)

删除IsSynchronizedWithCurrentItem =“True”如果需要,将其与下一个SelectionChanged事件一起添加。 这解决了我的问题

答案 3 :(得分:4)

您可以将SelectedIndex设置为-1:

<ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/>
  

注意:我想用纯xaml做这个,如果你有任何代码隐藏的想法,那么请不要打扰自己。

不幸的是,你不能在XAML中做所有事情...你通常可以避免代码隐藏,但你仍然需要编写转换器,标记扩展或附加属性

答案 4 :(得分:3)

这是我经常使用的一种技术。它建立在上述将FocusedElement属性添加到WindowUserControl的示例的基础上。

我的协议是我不希望窗口上的任何控件都有焦点。对我来说,解决方案是创建一个没有UI的虚拟控件,并为此指定焦点。事实恰恰相反,Control完全适合这个法案:

<UserControl
    x:Class="MyControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FocusManager.FocusedElement="{Binding ElementName=focus_thief}"
    mc:Ignorable="d">
    <Grid>
        <!-- no renderable UI -->
        <Control Name="focus_thief"/>
        <!-- wants focus, but won't get it -->
        <ListBox>
            <ListBoxItem>First Item</ListBoxItem>
        </ListBox>
    </Grid>
</UserControl>

答案 5 :(得分:1)

SelectedIndex是您要查找的属性吗?或许我不明白你的意思......

答案 6 :(得分:1)

<ListBox SelectioMode="Single" SelectedIndex="-1"/>

答案 7 :(得分:1)

这里的问题相同。有人找到了“干净”的解决方案吗? 问题在这里是一样的,它会导致一堆触发器执行。

明显的解决方案/修复:
1)从XAML中删除SelectionChanged事件处理程序
2)在InitializeComponents加载列表框后,在构造函数中添加处理程序。

答案 8 :(得分:-1)

添加空白项目。