2009-09-09 80 views
10

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

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

+0

我觉得你的意思,即当u将焦点移到列表框,第一个项目总是选择? (突出显示..如果你按下,第二项获得焦点?) – 2009-09-09 10:19:43

+0

1)对于标记我的问题为重复的人,你不明白这个问题,我也是发布重复的人。 2)@Madi,当列表框被渲染时,它的第一个项目被自动选中,我想禁用这个功能。 – Shimmy 2009-09-09 10:30:30

+0

hmm ..您可以使用FocusManager将焦点集中到某个项目/元素中(全部在xaml中)...但我不知道如何使它专注于什么:D – 2009-09-09 10:34:05

回答

5

那么我想这使用FocusManager.FocusedElement ..并取得了INTIAL重点
列表框本身..所以它具有focus..but没有元素被选中.. 如果u按下或标签列表框的..the第1个要素将被选中...

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

您可以设置的SelectedIndex为-1:

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

注:我想用纯XAML要做到这一点,如果您有任何代码背后的想法,那么请不要打扰自己。

可惜你不能在XAML中做的一切......你通常能避免代码隐藏,但你仍然需要写一些转换器,标记扩展或附加属性

+1

我正在寻找一个像你的答案。 唯一的小问题是它不起作用。 – Shimmy 2009-09-09 10:26:06

+2

它不工作:) – 2009-09-09 10:32:32

+1

+1,你不能在XAML中做所有事情。 – user7116 2009-09-09 18:01:35

1

是SelectedIndex的你的财产寻找 ?或者,也许我不明白你的意思......

+1

你得到了我的观点,但是当我将selectedindex设置为-1或者将选定项目设置为x:Null时,第一项仍然被选中 – Shimmy 2009-09-09 10:32:34

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

我不希望选择模式为Single。 – Shimmy 2009-09-09 20:25:52

-1

添加一个空白项。

1

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

明显的解决办法/修复:
1)从XAML
2取出SelectionChanged事件处理程序)添加处理程序在构造InitializeComponents已加载列表框后。

+0

相关的问题和评论shuold现有评论。 – Shimmy 2010-04-07 10:15:58

8

尝试

IsSynchronizedWithCurrentItem="False"

5

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

2

这是我经常使用的技术。它建立在上述将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> 
相关问题