明らかにそれ以上のものがありますが、ここに基本があります。これは一見とても単純なことのようですが、機能していません。
私はラベルを持っています。TextBoxがあります。
ラベルの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);