gpt4 book ai didi

c# - 聚焦 ListBoxItem 不会更新其样式

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:58 28 4
gpt4 key购买 nike

A 有一个 ListBox,需要在特定情况下聚焦特定项目(例如,显示搜索结果时)。这是通过附加属性使用以下函数完成的:

public static void OnElementIndexPropertyChanged (DependencyObject DObject, DependencyPropertyChangedEventArgs Args)
{
ListBox ListBoxControl = DObject as ListBox;

if (ListBoxControl != null &&
(int)Args.NewValue != -1)
{
ListBoxControl.ScrollIntoView (ListBoxControl.Items[(int)Args.NewValue]);
ListBoxControl.UpdateLayout ();

var ListBoxItem = (ListBoxItem)ListBoxControl.ItemContainerGenerator.ContainerFromItem (ListBoxControl.Items[(int)Args.NewValue]);
ListBoxControl.SelectedItem = ListBoxItem;
ListBoxItem.Focus ();
}
}

现在,ListBoxControl 确实获得了键盘焦点(如果我按住 Alt,它将在其周围显示一个虚线边框,并且它使用箭头键向上/向下移动它可以正常工作),但是,样式没有更新。最后选择的项目留下蓝色突出显示,而新选择的项目不会更新以显示蓝色突出显示。它只能在第一次正确工作,在项目被聚焦和突出显示之前。

除了手动更改背景/样式之外,还有其他解决方法吗?

最佳答案

我习惯于将 SelectedItem 设置为实际项目而不是该项目的容器。使用 SelectedIndex 似乎也更自然,因为您已经有了索引。通过将 SelectedItem 行替换为以下内容,我能够获得使用该样式的 ListBox 的选择:

ListBoxControl.SelectedIndex = (int)Args.NewValue;

附言

我应该补充一点,也许我没有完全理解这个问题,因为我想知道为什么你不只是使用 SelectedIndex 而不是自定义附加属性来更改选择(可能是因为滚动会不一样吗?)。

关于c# - 聚焦 ListBoxItem 不会更新其样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37325824/

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