gpt4 book ai didi

c# - 将事件GotFocus分配给WPF应用程序中的所有文本框

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:08 25 4
gpt4 key购买 nike

我想将GotFocus-Event添加到WPF应用程序中的每个文本框,因为它适用于触摸设备,并且每次使用TextBox时OSK都应打开。我在将事件添加到文本框的过程中遇到问题。 Aplication已经为PC构建(我正在一次交流中,我的目标是将Apl。引入Windows 8 Touch Devices)。这是我从中获得灵感的链接:Add/Remove handler to textbox

这是我的解决方案:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
foreach (Control tb in this.Controls)
{
if (tb is TextBox)
{
TextBox tb1 = (TextBox)tb;
tb1.GotFocus += TextBox_GotFocus;
}
}
}

private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
KeyBoardManager.LaunchOnScreenKeyboard();
}

当我想运行此代码时,出现以下错误:

Error 1 'OSK_Test.MainWindow' does not contain a definition for 'Controls' and no extension method 'Controls' accepting a first argument of type 'OSK_Test.MainWindow' could be found (are you missing a using directive or an assembly reference?)



我该怎么办,才能奏效?当然,LostFocus也是如此!

最佳答案

我所看到的问题是,您使用的答案是带有Winforms applicationWpf application,在Winforms中可以将控件添加到主窗体中,因此this.Controls可以工作,在Wpf中,您的MainWindow具有Content属性,该属性只能包含一个项目,通常是某种GridCanvasPanel。该对象是您的TextBox's所在的位置。

注意:仅在您的文本框是MainWindows LayoutControl的子级并且不更深地嵌入时才有效,如果它被深嵌入,则需要命名它们所包含的面板并对其进行迭代,我也不建议这是解决您的问题的正确方法,只是试图指出您的问题是:

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
foreach (Control tb in ((Panel)this.Content).Children)
{
if (tb is TextBox)
{
TextBox tb1 = (TextBox)tb;
tb1.GotFocus += TextBox_GotFocus;
tb1.LostFocus += tb1_LostFocus;
}

}

}

根据OP的评论:

您将需要给您的StackPpanel一个名称,或者使用一个已有的名称(如果存在)。即
<StackPanel x:Name="MyStackPanel" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100">
<TextBox Height="23" TextWrapping="Wrap" Text="TextBox"/>
<TextBox Height="23" TextWrapping="Wrap" Text="TextBox"/>
<TextBox Height="23" TextWrapping="Wrap" Text="TextBox"/>
<TextBox Height="23" TextWrapping="Wrap" Text="TextBox"/>
<TextBox Height="23" TextWrapping="Wrap" Text="TextBox"/>
</StackPanel>

使用将是这样的:
 public MainWindow()
{
InitializeComponent();

foreach (Control tb in MyStackPanel.Children)
{
if (tb is TextBox)
{
TextBox tb1 = (TextBox)tb;
tb1.GotFocus += TextBox_GotFocus;
tb1.LostFocus += tb1_LostFocus;
}
}
}

关于c# - 将事件GotFocus分配给WPF应用程序中的所有文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928232/

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