gpt4 book ai didi

WPF 弹出选项卡键错误

转载 作者:行者123 更新时间:2023-12-03 23:37:48 27 4
gpt4 key购买 nike

我有一个 WPF 弹出控件,其中包含一个 ListBox 和一个 Button。当我点击 Button ,它应该被禁用。问题是,当我禁用按钮时,Tab 键会从弹出窗口中消失。在设置按钮的 IsEnabled 后,我尝试将焦点设置到 ListBox为假,但这没有用。那么,如何将选项卡焦点设置为 Popup 控件内的 ListBox ?

这是我的代码。

Window1.xaml:

<Window x:Class="WpfApplication5.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<Button Name="openButton" Content="Open"/>
<Popup Name="popup" Placement="Center">
<StackPanel>
<ListBox Name="listBox"/>
<Button Name="newItemsButton" Content="New Items"/>
</StackPanel>
</Popup>
</StackPanel>
</Window>

Window1.xaml.cs:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace WpfApplication5
{
partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
openButton.Focus();
listBox.ItemsSource = new string[] { "Item1", "Item2", "Item3" };
listBox.SelectedIndex = 1;

openButton.Click += delegate { popup.IsOpen = true; };
popup.Opened += delegate { FocusListBox(); };
newItemsButton.Click += delegate
{
newItemsButton.IsEnabled = false;
FocusListBox();
};
}

void FocusListBox()
{
var i = listBox.ItemContainerGenerator.ContainerFromIndex(
listBox.SelectedIndex) as ListBoxItem;
if (i != null)
Keyboard.Focus(i);
}
}
}

这是一个屏幕截图:

alt text http://img11.imageshack.us/img11/6305/popuptabkey.png

后来编辑:

我找到了一种解决方法,即延迟 FocusListBox();调用如下:
Dispatcher.BeginInvoke(new Action(FocusListBox), DispatcherPriority.Input);

最佳答案

您需要通过设置 FocusManager.IsFocusScope property 来定义明确的焦点范围。在弹出窗口上:

<Popup FocusManager.IsFocusScope="true">
<!-- your content here -->
</Popup>

这将防止焦点移回包含元素内的控件。

关于WPF 弹出选项卡键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591726/

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