0

明らかにそれ以上のものがありますが、ここに基本があります。これは一見とても単純なことのようですが、機能していません。

私はラベルを持っています。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);
4

1 に答える 1

0

I copied your code and it works fine for me, even with previewmouseclick, something else seems to be the problem.

Likely throwing the message box up stops the focus from shifting to whatever it was going to shift to after the PreviewMouseLeftButtonDown event fires. Perhaps the UserControl itself is getting focus?

于 2012-09-10T15:35:18.800 に答える