gpt4 book ai didi

c# - 在焦点范围内使用列表框

转载 作者:太空狗 更新时间:2023-10-29 20:34:47 24 4
gpt4 key购买 nike

简短的故事:焦点范围内的列表框不允许选择项目。

长话短说:

我正在尝试制作一个上下文相关的数据输入小部件。我有几个字段的主面板。在其下方,我有一个带有 FocusManager.FocusScope="True" 的面板。该面板将填充当前具有焦点的字段的相关小部件。例如,选择一个日期字段会在屏幕底部显示一个日历。

我有几个控件要求用户从列表中选择多个值之一。我将一个 ListBox 放入焦点范围,但我无法选择任何项目。当(以编程方式)选择某些内容并单击列表框时,它会取消选择所有内容。

我测试了几个事件,它没有接收到 MouseDown 事件,但它接收到了 MouseMove 事件。每当我单击某个项目时它都会触发 GotFocus,但它永远不会触发 LostFocus。我不确定这意味着什么,但我希望它对正在阅读本文的人有所帮助。

这是我用来显示上下文相关小部件的代码。我的窗口中有以下 XAML:

<Grid x:Name="EntryWidget" FocusManager.IsFocusScope="True">
<Grid.Resources>
<ListBox x:Key="List" ItemsSource="{Binding}" />
</Grid.Resources>
</Grid>

我使用 Window.GotFocus 路由事件将小部件更新为适当的控件,如下所示:

private void Window_GotFocus(object sender, RoutedEventArgs e)
{
FrameworkElement focus = (FrameworkElement)FocusManager.GetFocusedElement(this);
EntryWidget.Children.Clear(); // Could this be the culprit?
object tag = focus.Tag;
if (tag != null)
{
if (EntryWidget.Resources.Contains(tag))
{
EntryWidget.Children.Add(EntryWidget.Resources[tag] as UIElement);
}
}
}

所以:

  1. 有没有办法让 ListBox 在焦点范围内工作?

  2. 或者是否有另一个列表控件在焦点范围内工作得更好?

  3. 还是我使用焦点范围采取了错误的方法?我的要求:用户必须能够从可滚动列表中选择一个项目,这会将值输入到当前字段中。当前字段不应失去焦点。

最佳答案

我的回答是不要为此使用焦点范围

你有点违背了专注的目的。如果有人不会使用鼠标而想使用键盘怎么办?

为什么不只在列表中进行选择,然后将焦点设置回原始控件,而不是使用焦点范围做所有这些额外的工作?

关于c# - 在焦点范围内使用列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8744285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com