- How to hide combobox toggle button if there is only one item?
- <ComboBox x:Name="CList" ItemsSource="{Binding Path=C}" >
- <Style TargetType="{x:Type ToggleButton}" >
- <Style.Triggers>
- <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
- <Setter Property="Visibility" Value="Hidden" />
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </ComboBox>
- using System;
- using System.Windows;
- using System.Windows.Data;
- using System.Globalization;
- namespace WPFSandbox
- {
- public class ComboBoxItemCountToEnabledConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value != null && value.GetType() == typeof(Int32))
- {
- if ((int)value > 1)
- return true;
- }
- return false;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
- public class ComboBoxItemCountToVisibilityConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value != null && value.GetType() == typeof(Int32))
- {
- if ((int)value > 1)
- return Visibility.Visible;
- }
- return Visibility.Collapsed;
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
- }
- <Window
- ...
- ...
- xmlns:converters="clr-namespace:WPFSandbox">
- <Window.Resources>
- <converters:ComboBoxItemCountToVisibilityConverter x:Key="ComboBoxItemCountToVisibilityConverter"/>
- <converters:ComboBoxItemCountToEnabledConverter x:Key="ComboBoxItemCountToEnabledConverter"/>
- </Window.Resources>
- <StackPanel>
- <ComboBox ItemsSource="{Binding C}" IsEnabled="{Binding Path=C.Count, Converter={StaticResource ComboBoxItemCountToEnabledConverter}}"/>
- <ToggleButton Visibility="{Binding Path=C.Count, Converter={StaticResource ComboBoxItemCountToVisibilityConverter}}"/>
- </StackPanel>
- <ComboBox Name="CList" ItemsSource="{Binding Path=C}"
- SelectedItem="{Binding Path=CC}" VerticalAlignment="Center" Margin="0,0,10,0" >
- <ComboBox.Style>
- <Style TargetType="{x:Type ComboBox}" >
- <Style.Triggers>
- <DataTrigger Binding="{Binding Path=Items.Count, ElementName=CList}" Value="1">
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate>
- <TextBlock Text="{Binding Items[0], ElementName=CList}" />
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </DataTrigger>
- </Style.Triggers>
- </Style>
- </ComboBox.Style>
- </ComboBox>