2016-10-27 9 views
0

を制御するために、私は次のXAML持っている:防ぎタブナビゲーション下のz-indexが

<Grid> 
    <local:MyControl1 Grid.Row="0" Panel.Z-Index="1" /> 
    <local:MyControl12 Grid.Row="1" Panel.Z-Index="1" /> 
    <local:MyControl21 Grid.Row="0" Grid.RowSpan="2" Panel.ZIndex="2" /> 
    <local:MyControl22 Grid.Row="0" Grid.RowSpan="2" Panel.ZIndex="3" /> 
</Grid> 

MyControl1MyControl12MyControl21が示され、それを私たち。 MyControl22が表示されている場合は、MyControl1,MyControl12およびMyControl21です。

私が欲しいのは、MyControl22のタブだけです。MyControl22子供のコントロールを選択できました。しかし、タブレーションのように、下位レベルのコントロールもMyControl21,MyControl1MyControl12から選択しています。

低レベルでタブ選択コントロールを防止する方法はありますか?

答えて

0

添付プロパティKeyboardNavigation.TabNavigationを使用できます。

<Grid> 
    <local:UserControl1 x:Name="uc1" Panel.ZIndex="1" 
         KeyboardNavigation.TabNavigation="{Binding ElementName=uc2, Path=Visibility, Converter={StaticResource TabNavConverter}}" /> 
    <local:UserControl2 x:Name="uc2" Panel.ZIndex="2" /> 
</Grid> 

TabNavConverterはそれが表示されている場合uc2が崩れたりNoneされている場合Continueを返しIValueConverterです:

はのサンプルを見てみましょう。

私はそれが助けてくれることを願っています。

0

多くの素晴らしいオプションはありません。私が知る限り、KeyboardNavigationには、ZIndexに基づくコントロールを自動的にスキップする設定はありません。したがって、ZIndex値のすべての異なる組み合わせ(自動的にトップコントロールを決定する)に対して自動的に動作するソリューションを見つけることは困難です。私は、スタイルトリガーに基づいてIsTabStopプロパティを変更するのが最善の策だと思います。あなたのコントロールはすべての異なる種類があるので、

<Style TargetType="Control" x:Key="TabStopStyle"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Panel.ZIndex)}" Value="3"> 
     <Setter Property="KeyboardNavigation.IsTabStop" Value="True"/> 
     </DataTrigger> 
    </Style.Triggers> 
    <Setter Property="KeyboardNavigation.IsTabStop" Value="False"/> 
</Style> 

残念ながら、あなたが明示的に各1上のスタイルを設定する必要があります:

<local:MyControl22 Grid.Row="0" Grid.RowSpan="2" Panel.ZIndex="3" Style="{StaticResource TabStopStyle}"/> 

この例では、トップコントロールのZIndexが3であることを前提としています。これを一般化するために、上部コントロールをZIndex(100のような)より高い値に設定すると、より多くのコントロールが追加された場合にトリガールールを変更する必要がなくなります。

+0

注意: 'KeyboardNavigation.IsTabStop'プロパティは' MyControl22'に付けられ、 'false'に設定されていても、その子はタブ止めされません。 –

+0

@IlVicそれは本当です - 私は 'MyControl22'に子コントロールがないと仮定していました。私は 'TabNavigation'プロパティはおそらくStyle Triggerから特定のカスタムコントロールのために必要であれば設定できると思います。 – Jelly