10

標準のMDIアプリケーションのウィンドウのように動作する特殊なノードを持つカスタムキャンバスがあります。望ましい動作は、「ウィンドウ」の子コントロールのいずれかにフォーカスがある場合、その「ウィンドウ」がアクティブであると言われることです。

これで、IsFocusedプロパティはカスケードされていないように見えます。つまり、子コントロールにフォーカスがある場合、そのコンテナーも「フォーカス」に設定されていないため、使用できません。同じ理由で、IsFocusedプロパティをコンテナに設定することはできません。これは、子からIsFocusedプロパティを盗むと思われるためです。

私の唯一の考えは、HasChildWithFocusなどと呼ばれる新しいDPを作成し、コードビハインドでバブルイベントをリッスンしてそのフラグを設定することです。それが最善の方法かどうかはわかりません。(これは、添付プロパティ/添付動作の組み合わせとして実装する場合があります。)

しかしもちろん、私たちが単にコントロールに尋ねることができれば、はるかに良いでしょう「ねえ...あなたまたはあなたの子供たちの誰かが焦点を合わせていますか?」

それで、あなたはできますか?

4

1 に答える 1

13

UIElement.IsKeyboardFocusWithin次のように直接使用できます。

<Grid>
    <Grid.Resources>
        <Style x:Key="panelStyle" TargetType="Border">
            <Setter Property="BorderBrush" Value="PaleGoldenrod"/>
            <Style.Triggers>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                    <Setter Property="BorderBrush" Value="PaleGreen"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Grid.Resources>
    <UniformGrid Columns="2">
        <Border BorderThickness="10" Style="{StaticResource panelStyle}">
            <StackPanel>
                <TextBox Text="TextBox1"/>
                <TextBox Text="TextBox2"/>
            </StackPanel>
        </Border>
        <Border BorderThickness="10" Style="{StaticResource panelStyle}">
            <StackPanel>
                <TextBox Text="TextBox3"/>
                <TextBox Text="TextBox4"/>
            </StackPanel>
        </Border>
    </UniformGrid>
</Grid>

この例では、キーボードフォーカスのある要素を含む境界線が、別の境界線ブラシでスタイル設定されています。

于 2011-02-10T06:27:21.367 に答える