C# 列表框在失去焦点后保留选择
我有一个列表框,当处于焦点时,当我选择一个项目时,它会返回一个有效的SelectedIndex。如果我有一个有效的SelectedIndex,并在同一论坛上单击一个文本框,SelectedIndex现在变成-1。但是,我希望它保持其SelectedIndex不变。如何执行此操作?处理事件并保存所选值,以便在控件重新获得焦点时还原它。处理事件并保存所选值,以便在控件重新获得焦点时还原它。我尚未在我的应用程序中验证这一点,但如果LB失去焦点您可能必须自己处理这种情况,方法是缓存最后选定的索引,并在控件恢复焦点时重置它。您可以在包含表单中执行此操作,也可以在从ListBox派生的类中执行此操作 您甚至可以在看到选定索引变为-1时尝试设置它。不知道会发生什么,但我很想知道C# 列表框在失去焦点后保留选择,c#,.net,listbox,C#,.net,Listbox,我有一个列表框,当处于焦点时,当我选择一个项目时,它会返回一个有效的SelectedIndex。如果我有一个有效的SelectedIndex,并在同一论坛上单击一个文本框,SelectedIndex现在变成-1。但是,我希望它保持其SelectedIndex不变。如何执行此操作?处理事件并保存所选值,以便在控件重新获得焦点时还原它。处理事件并保存所选值,以便在控件重新获得焦点时还原它。我尚未在我的应用程序中验证这一点,但如果LB失去焦点您可能必须自己处理这种情况,方法是缓存最后选定的索引,并在控
编辑:刚刚测试过,和其他海报一样,我也无法复制。你的LB肯定有点不同,我还没有在我的应用程序中验证这一点,但如果LB失去焦点时SelectedIndex属性发生变化,你可能需要自己处理这种情况,缓存最后选择的索引,并在控件恢复焦点时重设它。您可以在包含表单中执行此操作,也可以在从ListBox派生的类中执行此操作 您甚至可以在看到选定索引变为-1时尝试设置它。不知道会发生什么,但我很想知道
编辑:刚刚测试过,和其他海报一样,我也无法复制。你的LB肯定有些许不同列表框将保持它的SelectedIndex,而不考虑焦点 我在一个空白项目上测试了它,其中有一个ListBox、一个TextBox和一个用于显示ListBox的SelectedIndex的标签。在列表框的SelectedIndexChanged和文本框的TextChanged事件下,我用列表框的SelectedIndex更新了标签
必须有其他原因导致所选索引更改为-1。列表框将保持其所选索引,而不考虑焦点 我在一个空白项目上测试了它,其中有一个ListBox、一个TextBox和一个用于显示ListBox的SelectedIndex的标签。在列表框的SelectedIndexChanged和文本框的TextChanged事件下,我用列表框的SelectedIndex更新了标签
必须有其他原因导致所选索引更改为-1。这些控件是在不同的对话框中,还是在选项卡式容器上有不同的选项卡?这是我能想到的唯一一种方法,当你改变焦点时,你会失去你选择的索引。否则,任何人(例如,单击按钮)如何对项目采取行动?当焦点转到正在单击的按钮时,您将丢失选择…这些控件是在不同的对话框中,还是在选项卡式容器上的不同选项卡中?这是我能想到的唯一一种方法,当你改变焦点时,你会失去你选择的索引。否则,任何人(例如,单击按钮)如何对项目采取行动?当焦点转到正在单击的按钮时,您将丢失选择…我的问题与原始海报相同。 我无法完全理解,但当列表框绑定到一个可观察的集合,并且集合发生更改时,所选项目似乎失去了焦点
我将所选索引保存在一个变量中,并在所选索引为-1并且恢复它是有效的情况下重置它,从而绕过了这个问题。我遇到了与原始海报相同的问题。 我无法完全理解,但当列表框绑定到一个可观察的集合,并且集合发生更改时,所选项目似乎失去了焦点
我将所选索引保存在一个变量中,并在所选索引为-1并且恢复它是有效的情况下重置它,从而绕过了这个问题。这是一个老问题,但如果其他人遇到同样的问题,请检查您的ListBoxItem样式,尤其是如果您使用的是WPF主题中的样式之一 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,问题应该会消失这是一个老问题,但如果其他人遇到同样的问题,请检查ListBoxItem样式,特别是如果您使用的是WPF主题中的一种样式 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,问题应该会消失TextBox has AutoPostBack=true也许设置了?也许,但标记表明这是一个C.NET,我的理解是,C.NET中没有可用于TextBox.TextBox has AutoPostBac的AutoPostBack属性
k=true可能设置?可能但标记表明这是一个C.NET,我的理解是C.NET中没有文本框的自动回写属性。这是ASP.NET还是WinForms?这是ASP.NET还是WinForms?我在使用WPF和MVVM模式时遇到了一个非常类似的问题,我有一个瀑布GUI,多个列表框相邻。一旦其中一个列表框失去了焦点,他们的选择也就失去了。移除你指出的样式触发器,为我修复它。非常感谢。我在使用WPF和MVVM模式时遇到了一个非常类似的问题,我有一个瀑布式GUI,多个列表框相邻。一旦其中一个列表框失去了焦点,他们的选择也就失去了。移除你指出的样式触发器,为我修复它。非常感谢。