ListBox的行为是自动选择第一个项目,我该如何避免?
注意:我更喜欢使用纯xaml,如果你有任何代码隐藏的想法,那么请不要打扰自己。
答案 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
属性添加到Window
或UserControl
的示例的基础上。
我的协议是我不希望窗口上的任何控件都有焦点。对我来说,解决方案是创建一个没有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)
添加空白项目。