Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 列表框始终自动选择第一项_Wpf_Listbox_Selecteditem - Fatal编程技术网

Wpf 列表框始终自动选择第一项

Wpf 列表框始终自动选择第一项,wpf,listbox,selecteditem,Wpf,Listbox,Selecteditem,ListBox的行为是自动选择第一项,我如何避免这种情况 注意:我更喜欢使用纯xaml,如果您有任何代码隐藏的想法,请不要打扰自己。您可以将SelectedIndex设置为-1: <ListBox ItemsSource="{Binding MyData}" SelectedIndex="-1"/> 注意:我想用纯xaml实现这一点,如果您有任何代码隐藏的想法,那么请不要自找麻烦 不幸的是,您不能在XAML中完成所有操作。。。通常可以避免代码落后,但仍需要编写转换器、标记扩展或

ListBox的行为是自动选择第一项,我如何避免这种情况


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

您可以将SelectedIndex设置为-1:

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

注意:我想用纯xaml实现这一点,如果您有任何代码隐藏的想法,那么请不要自找麻烦


不幸的是,您不能在XAML中完成所有操作。。。通常可以避免代码落后,但仍需要编写转换器、标记扩展或附加属性

是否选择要查找的属性的索引?或者我不明白你的意思…


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

我用FocusManager.FocusedElement尝试了这个方法。。并将最初的焦点转移到
列表框本身。。所以它有焦点..但是没有选择任何元素。。 如果按向下键或tab..,将选择列表框的第一个元素

<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>

吉姆
做记号
曼迪

添加一个空白项。

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

显而易见的解决方案/解决方案:

  • 从XAML中删除SelectionChanged事件处理程序
  • 在InitializeComponents加载listbox后,在构造函数中添加处理程序
  • 试一试


    IsSynchronizedWithCurrentItem=“False”

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

    这里有一个我经常使用的技巧。它以上面的示例为基础,将
    FocusedElement
    属性添加到
    窗口
    UserControl

    我的约定是,我不希望窗口上的任何控件都有焦点。我的解决方案是创建一个没有UI的虚拟控件,并将焦点分配给它。恰好
    控件
    完全符合要求:

    <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>
    
    
    第一项
    
    我想你的意思是,当你将焦点移动到列表框时,第一项总是被选中的?(突出显示..如果你按下,第二项获得焦点?)1)对于将我的问题标记为重复的人,你不理解问题,我也是发布重复的人。2) @Madi,当列表框呈现时,它的第一个项目会被自动选中,我想禁用这个功能。嗯。。您可以使用FocusManager将焦点集中到某个项目/元素..(全部在xaml中)。。。然而,我不知道如何让它什么都不关注:DI正在寻找一个和你一样的答案。唯一的小问题是它不起作用。问题是我想避免这种情况,因为选择触发了一系列执行,这些执行在SelectionChanged处理程序中处理。你明白我的意思了,但当我将selectedindex设置为-1或将SelectedItem设置为x:Null时,第一个项目仍然被选中。我不希望选择模式是单一的。相关的问题和评论应该是对现有项目的评论。非常聪明的解决方案。UI正在做一些有时是可取的事情,但如果所选项目被重新设置样式,当整个控件重新呈现时,它仍然会保留一个恼人的黑盒。您的解决方案可以防止这种情况发生,并且正好存在于它应该存在的位置。我选择将我的命名为“takefocustoavoiduisinganonselecteditem”