Как скрыть кнопку-флажок, если есть только один элемент? - PullRequest
8 голосов
/ 17 января 2012

У меня есть приложение WPF. В одном окне есть поле со списком ... и я хочу скрыть кнопку переключения и отключить поле со списком, если есть только один элемент.

Как бы мне этого добиться?

Я попробовал приведенный ниже код для сокрытия кнопки переключения. Но не повезло

Любая помощь будет оценена. спасибо

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

Ответы [ 3 ]

8 голосов
/ 18 января 2012

Лучшее решение - заменить шаблон поля со списком на шаблон элемента управления (который содержит только текстовый блок), когда количество элементов равно нулю.

Вот xaml для того же.

<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>
4 голосов
/ 17 января 2012

Вам необходимо изменить Template для ComboBox и реализовать триггер внутри него.У вас нет доступа к элементам управления в шаблоне извне.

(Вы можете скопировать и изменить существующий шаблон , непосредственное изменение части шаблона практически невозможно)

0 голосов
/ 17 января 2012

Вы всегда можете также использовать конвертер:
(Извините, я не полностью прочитал ваш вопрос)

Преобразователи

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();
        }
    }
}

1007 * XAML * <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>

...