我想将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 application
的Wpf application
,在Winforms中可以将控件添加到主窗体中,因此this.Controls
可以工作,在Wpf中,您的MainWindow
具有Content
属性,该属性只能包含一个项目,通常是某种Grid
,Canvas
或Panel
。该对象是您的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/