C# 弹出窗口中的文本框不';无法在WPF应用程序中获得焦点
我正在为一个信息亭应用程序构建一个窗口,该应用程序有一个管理屏幕,可以连接到wifi网络。实际上,我正在移植一个已有的WinForms应用程序,它已经做到了这一点,但并没有给我们想要创建更有趣的UI的灵活性。所以,我们要转到WPF 这个窗口非常简单,它有一个列表视图来显示它找到的网络,如果你点击其中一个,它就会连接到它。为了连接,如果需要,我们需要提示输入该网络的安全代码。为此,我们打开一个弹出窗口,它有三个部分:顶部的“dialog-y”提示部分、间隔行和空白边框,空白边框位于屏幕键盘后面,但有漂亮的圆角 顶部部分有一个标题、一个文本框和两个按钮,即“连接”和“取消”。再说一次,没什么复杂的 所有这些都有效。你点击一个网络,我们会显示弹出窗口和键盘,除了:密码文本框永远不会得到焦点。即使你点击它。没有焦点。我发现让它聚焦的唯一诀窍是点击关闭弹出窗口(就像回到listview,如果弹出窗口打开,它已经忽略点击,所以它是安全的),然后点击文本框上的后退,瞧!集中我真的不想把它放在用户手册里 以下是xaml的弹出部分:C# 弹出窗口中的文本框不';无法在WPF应用程序中获得焦点,c#,wpf,textbox,popup,focus,C#,Wpf,Textbox,Popup,Focus,我正在为一个信息亭应用程序构建一个窗口,该应用程序有一个管理屏幕,可以连接到wifi网络。实际上,我正在移植一个已有的WinForms应用程序,它已经做到了这一点,但并没有给我们想要创建更有趣的UI的灵活性。所以,我们要转到WPF 这个窗口非常简单,它有一个列表视图来显示它找到的网络,如果你点击其中一个,它就会连接到它。为了连接,如果需要,我们需要提示输入该网络的安全代码。为此,我们打开一个弹出窗口,它有三个部分:顶部的“dialog-y”提示部分、间隔行和空白边框,空白边框位于屏幕键盘后面,但
<Popup x:Name="popPasscode" Placement="Top" HorizontalOffset="50" VerticalOffset="1000" AllowsTransparency="True" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="50" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White" CornerRadius="20" Width="600" Height="400">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#464646" Height="50" Margin="8,10,8,0" CornerRadius="25" >
<Label x:Name="lblTitleSecurityCode" Content="Enter the security code" Foreground="White" FontFamily="Arial" FontSize="30" FontWeight="Bold" HorizontalAlignment="Center"/>
</Border>
<TextBox Grid.Row="1" x:Name="tbPasscode" Height="50" FontFamily="Arial" FontSize="30" Margin="40,0,40,0"/>
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="10,0,10,10" HorizontalAlignment="Center">
<Controls:ImageButton x:Name="btnCodeConnect" Content="Connect" Height="70" Width="275" Foreground="Black" Style="{DynamicResource PlainButton}" FontFamily="Arial" FontSize="30" FontWeight="Bold" Click="btnCodeConnect_Click" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Controls:ImageButton x:Name="btnCodeCancel" Content="Cancel" Height="70" Width="275" Foreground="Black" Style="{DynamicResource PlainButton}" FontFamily="Arial" FontSize="30" FontWeight="Bold" Click="btnCodeCancel_Click" HorizontalAlignment="Center" VerticalAlignment="Center" />
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="2" x:Name="brdrKbd" Background="White" CornerRadius="20" Width="1200" Height="420"/>
</Grid>
</Popup>
我已经为tbPasscode的DependencyElement尝试了两种不同的方法,但是我真的不知道我在做什么,或者我在做什么有什么不同。哦,我有没有提到我刚刚完成了WPF编码的第一周?是的,WPF新手警报
我看到了,但没有多大帮助,因为我认为我已经在做这些了。注册到
ListView/ListViewItem
上的MouseUp
事件,而不是MouseDown
。
在处理程序中,您可以执行以下操作:
popPasscode.IsOpen = true;
Keyboard.Focus(tbPasscode);
ListView上的MouseUp
将焦点从Popup
上移开,所以在MouseUp中打开你的Popup而不是MouseDown你能分享你如何打开Popup的代码吗?它在第二个代码部分的第一行,是ListView的点击事件处理程序,我在弹出窗口中将IsOpen设置为true。睡眠是一件多么美妙的事情。屏幕键盘是一个旧的C++应用程序,它打开了NOVAc激活设置。如果这就是问题所在呢?所以我试着不打开键盘,我可以点击文本框,无需点击背景就可以聚焦。在打开osk后,通过添加对Activate()的调用解决了最初的问题-显然,您可以随心所欲地设置焦点,但它不会激活,至少与我的预期相反。现在,它仍然没有将焦点设置在我想要的地方…我没有使用mousedown,我使用的是onselection,但是很明显,这发生在mousedown期间。我交换了mouseup,使用在这里找到的代码()来获取行,它成功了。谢谢哦,在读了更多的书之后,我用一个简单的键盘替换了所有的FocusManager垃圾;更易于维护。
popPasscode.IsOpen = true;
Keyboard.Focus(tbPasscode);