Indika Pathirage
Indika Pathirage

Reputation: 21

Change the visibility of a grid when a button has focus

I am working on a WPF application and I would like to change the visibility of a grid if an only if a button has focus. I have the following code to change the background of the button if it has focus. I know how to do this Programmatically, but I'd like to know how to get the same thing done in XAML.

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

Upvotes: 1

Views: 176

Answers (1)

Funk
Funk

Reputation: 11211

You can name your Button and use a 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>

Upvotes: 1

Related Questions