akonsu
akonsu

Reputation: 29586

how to hide a button that is bound to a command that cannot execute?

Instead of disabling the button which happens automatically, i would like to hide (or rather collapse the visibility of) the button.

Upvotes: 32

Views: 10461

Answers (3)

Daniel Leiszen
Daniel Leiszen

Reputation: 1897

The same behavior without style and trigger, if the Visibility property is not bound yet.

Command={Binding MyCommand}
Visibility="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Converter={StaticResource BTVC}}"

Where BTVC is a BooleanToVisibilityConverter (that is a must have).

Upvotes: 27

Wonko the Sane
Wonko the Sane

Reputation: 10823

You could use a Style and Triggers, assuming that the command is in charge of setting the Button enabled/disabled:

        <Button x:Name="btnMoveUp"
                Command="{x:Static local:Window1.MoveItemUp}">
            <Button.Style>
                <Style TargetType="{x:Type Button}" >
                    <Style.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Visibility" Value="Collapsed" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

Note that you can define this Style at a higher scope and share it - I just put it right with the Button for a more compressed example.

Upvotes: 41

Klaus Byskov Pedersen
Klaus Byskov Pedersen

Reputation: 121067

Use the BooleanToVisibilityConverter and bind to a bool as described here.

Upvotes: 1

Related Questions