好的,显然还有更多内容,但这是基础知识。这似乎是一件很简单的事情,但它不起作用。
我有一个标签。我有一个文本框。
标签的 ZIndex = "1" TextBox 的 ZIndex = "0"
即它们彼此重叠并且TextBox 是不可见的。
当用户单击 LABEL(现在通过 PreviewMouseLeftButtonDown,但在此“工作”之后将成为 ViewModel 中的命令)时,应用程序应将焦点设置到 TextBox。
简单吧?错误的...
如果我有这个代码......它不起作用。
private void inVisTxtBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
inVisTxtBox.Focus();
// TextBox_MouseDown(sender, e);
}
如果我有这个代码......它确实有效
private void inVisTxtBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
inVisTxtBox.Focus();
// TextBox_MouseDown(sender, e);
MessageBox.Show("This is ridiculous");
}
最后是 XAML:
<Ctrls:AControl x:Class="<location of class>"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:CommandControls="clr-namespace:<location of custom controls>" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid Margin="0,15,15,15">
<!--<Button Height="50" Click="Button_Click">FOC</Button>-->
<TextBox x:Name="inVisTxtBox" Focusable="True" Grid.ZIndex="0" Width="100" Margin="5"/>
<Label Grid.ZIndex="1" Margin="5" Content="243234234234234" HorizontalAlignment="Left" Width="100" PreviewMouseLeftButtonDown="inVisTxtBox_PreviewMouseLeftButtonDown"
x:Name="KeyPress_TextBox"/>
</Grid>
</Ctrls:AControl>
编辑
如果我将标签制作成带有标签的模板按钮,它的模板就可以工作:
<Button x:Name="KeyPress_TextBox" Grid.ZIndex="1" Margin="5" Content="243234234234234" HorizontalAlignment="Left" Width="100" Click="KeyPress_TextBox_Click">
<Button.Template>
<ControlTemplate TargetType="Button">
<Label Content="{TemplateBinding Content}"/>
</ControlTemplate>
</Button.Template>
</Button>
这是为什么?
一定与事件路线/泡沫的方式有关吗?
我现在这样做了……但我更好奇发生了什么。
另外......以下都不起作用:
Keyboard.Focus(inVisTxtBox);
FocusManager.SetFocusedElement(MainGrid,inVisTxtBox);
Keyboard.Focus(inVisTxtBox);