ListBox 的行为是自动选择第一项,我该如何避免呢?
注意:我更喜欢使用纯 xaml 来执行此操作,如果您有任何代码隐藏的想法,请不要打扰自己。
ListBox 的行为是自动选择第一项,我该如何避免呢?
注意:我更喜欢使用纯 xaml 来执行此操作,如果您有任何代码隐藏的想法,请不要打扰自己。
尝试
IsSynchronizedWithCurrentItem="False"
好吧,我尝试使用 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>
如果需要,删除 IsSynchronizedWithCurrentItem="True" 并在下一个 SelectionChanged 事件中添加它。这解决了我的问题
您可以将 SelectedIndex 设置为 -1 :
<ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/>
注意:我想用纯 xaml 来做这件事,如果你有任何代码隐藏的想法,请不要打扰自己。
不幸的是,你不能在 XAML 中做所有事情......你通常可以避免代码隐藏,但你仍然需要编写转换器、标记扩展或附加属性
这是我经常使用的一种技术。它建立在上面将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>
<ListBox SelectioMode="Single" SelectedIndex="-1"/>
SelectedIndex 是您要查找的属性吗?或者我没明白你的意思...
这里同样的问题。有人找到“干净”的解决方案吗?
这里的问题是一样的,它会导致执行一堆触发器。
明显的解决方案/修复:
添加一个空白项。