1

我有一个 ListBox,当我处于焦点时,当我选择一个项目时,它会返回一个有效的 SelectedIndex。如果我有一个有效的 SelectedIndex 并且我在同一个论坛上单击一个 TextBox,SelectedIndex 现在变为 -1。但是我希望它保持其 SelectedIndex 不变。我该怎么做呢?

4

6 回答 6

3

无论焦点如何,ListBox 都将保持其 SelectedIndex。

我在一个空白项目上对其进行了测试,其中一个 ListBox、一个 TextBox 和一个 Label 用于显示 ListBox 的 SelectedIndex。在 ListBox 的 SelectedIndexChanged 和 TextBox 的 TextChanged 事件下,我用 ListBox 的 SelectedIndex 更新了标签

一定有其他原因导致 Selected Index 变为 -1。

于 2008-10-08T19:51:52.490 回答
3

我和原始海报有同样的问题。我无法完全弄清楚,但似乎当您将列表框绑定到可观察集合并且集合发生更改时,所选项目失去焦点。

我通过将所选索引保存在变量中并在所选索引为 -1 时将其重置(并且恢复它是有效的)来解决这个问题

于 2010-06-07T19:01:46.957 回答
3

这是一个老问题,但如果其他人遇到同样的问题,请检查您的 ListBoxItem 样式,特别是如果您使用的是 WPF Themes 中的一种样式

WPF 主题的问题特别是包含控制模板之外的部分:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
....
<Style.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush po:Freeze="True" Color="{DynamicResource BlackColor}" />
                </Setter.Value>
            </Setter>
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
            <Setter Property="IsSelected" Value="true" />
        </Trigger>
    </Style.Triggers>
</Style>

删除 Style.Triggers 问题应该会消失

于 2013-11-25T21:24:48.583 回答
2

处理SelectedIndexChanged事件并保存选定的值,以便在控件重新获得焦点时恢复它。

于 2008-10-08T19:47:44.417 回答
1

我尚未在我的应用程序中验证这一点,但如果当 LB 失去焦点时 SelectedIndex 属性发生变化,您可能必须自己处理这种情况,方法是缓存最后选择的索引并在控件重新获得焦点时重置它。您可以在包含表单中执行此操作,也可以在从 ListBox 派生的类中执行此操作。

您甚至可以在看到所选索引变为 -1 时尝试设置它。不知道会发生什么,但我很想知道......

编辑:刚刚对其进行了测试,就像其他海报一样,我也无法复制它。您的 LB 必须稍有不同

于 2008-10-08T19:49:53.400 回答
1

这些控件是在不同的对话框中,还是在选项卡式容器上的不同选项卡中?这是我能想到的唯一方法,当你改变焦点时你会失去你的 SelectedIndex 。否则,任何人将如何例如单击按钮对项目采取行动?当焦点转到您单击的按钮时,您将失去选择...

于 2008-10-08T21:14:15.523 回答