2016-11-03 4 views
1

WPFアプリケーションで作業していますが、ボタンにフォーカスがある場合にのみグリッドの可視性を変更したいと思います。フォーカスがある場合、ボタンの背景を変更する次のコードがあります。私はこれをプログラマチックに行う方法を知っていますが、XAMLで同じことをする方法を知りたいと思います。ボタンにフォーカスがあるときにグリッドの可視性を変更する

 <Style TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="Background" Value="Aqua" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

答えて

1

あなたはDataTriggerをあなたのボタンに名前を付け、使用することができます。

<Window 

    ...  

    > 
    <Window.Resources> 
     <Style TargetType="{x:Type Grid}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsFocused, ElementName=butt}" Value="True"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <StackPanel> 
     <Button x:Name="butt">Hide</Button> 
     <Grid> 
      <Label Background="Yellow">Inside Grid</Label> 
     </Grid> 
     <Button>Steal focus</Button> 
    </StackPanel> 
</Window> 

EDIT

<Window 

    ...  

    > 
    <Window.Resources> 
     <Style x:Key="CollapsedGridStyle" TargetType="{x:Type Grid}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=butt}" Value="True"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <StackPanel> 
     <ToggleButton x:Name="butt">Hide</ToggleButton> 
     <Grid x:Name="GridA" 
       Style="{StaticResource CollapsedGridStyle}"> 
      <Label Background="Yellow">Grid A</Label> 
     </Grid> 
     <Grid x:Name="GridB"> 
      <Label Background="Green">Grid B</Label> 
     </Grid> 
    </StackPanel> 
</Window> 
+0

おかげ@Funk。 2つのグリッド、グリッドAとグリッドBが同じXAMLファイルにあるとします。グリッドAは常に表示されます。ボタンを押すと、グリッドBが表示され、グリッドAが非表示になります。どのように達成するのですか? –

+0

@IndikaPathirage 'Style'に' Key'を追加すると 'Grid A'だけに適用できます。私の更新を見て、 'Button'を状態を保持する' ToggleButton'に変更しました。 – Funk

+0

私は答えをupvoteできません。ありがとうございました! –

関連する問題