Reputation: 55
I do some binding between a ThreeState ToggleButton and a normal button
that's what I'm trying to achieve:
button#1 Visible if button#2 IsChecked=True or Null
button#1 Collapsed if button#2 IsChecked=False
The built-in BooleanToVisibilityConverter shows the button only when true.
I would be very grateful if you could help with the Converter. Thanks
Upvotes: 2
Views: 1588
Reputation: 189
And without BooleanToVisibilityConverter, only XAML :
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Visibility"
Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=chk1, Path=IsChecked}"
Value="False">
<Setter Property="Visibility"
Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Button Content="Button"
HorizontalAlignment="Left"
Margin="34,68,0,0"
VerticalAlignment="Top"
Width="75" />
<CheckBox x:Name="chk1"
Content=" Toggle"
HorizontalAlignment="Left"
Margin="34,29,0,0"
VerticalAlignment="Top"
IsThreeState="True"
IsChecked="True" />
</Grid>
Upvotes: 1
Reputation: 29018
This is ridiculously simple. The following IValueConverter
returns Visibility.Visible
when value
is either true
or null
:
public sealed class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is bool bValue && bValue
|| value == null
? Visibility.Visible
: Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is Visibility visibility
&& visibility == Visibility.Visible;
}
}
Upvotes: 2