12

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

注意:我更喜欢使用纯 xaml 来执行此操作,如果您有任何代码隐藏的想法,请不要打扰自己。

4

9 回答 9

13

尝试

IsSynchronizedWithCurrentItem="False"

于 2013-11-19T19:26:22.783 回答
7

好吧,我尝试使用 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>
于 2009-09-09T11:27:03.993 回答
5

如果需要,删除 IsSynchronizedWithCurrentItem="True" 并在下一个 SelectionChanged 事件中添加它。这解决了我的问题

于 2014-08-16T19:22:01.887 回答
4

您可以将 SelectedIndex 设置为 -1 :

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

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

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

于 2009-09-09T10:12:15.493 回答
4

这是我经常使用的一种技术。它建立在上面将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>
于 2017-02-14T16:14:36.740 回答
2
<ListBox SelectioMode="Single" SelectedIndex="-1"/>
于 2009-09-09T10:43:23.290 回答
1

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

于 2009-09-09T10:12:31.380 回答
1

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

明显的解决方案/修复:

  1. 从 XAML 中删除 SelectionChanged 事件处理程序
  2. InitializeComponents 加载列表框后,在构造函数中添加处理程序。
于 2010-04-05T16:00:04.147 回答
-2

添加一个空白项。

于 2009-09-09T17:59:25.393 回答