Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

binding

wpf

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

like image 466
akonsu Avatar asked Oct 15 '10 18:10

akonsu


3 Answers

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.

like image 67
Wonko the Sane Avatar answered Nov 05 '22 00:11

Wonko the Sane


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).

like image 39
Daniel Leiszen Avatar answered Nov 05 '22 01:11

Daniel Leiszen


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

like image 36
Klaus Byskov Pedersen Avatar answered Nov 05 '22 01:11

Klaus Byskov Pedersen