Silverlight Изменение содержимого на основе элемента управления CheckState (переключение нескольких ContentPresenters) - PullRequest
0 голосов
/ 07 марта 2012

Я хотел бы изменить содержимое элемента управления на основе его текущего CheckState (проверено, не проверено, неопределено). Если возможно, я бы хотел, чтобы решение использовало только XAML и не требовало кода.

Мне интересно, какой элемент управления использовать и как определить несколько наборов содержимого.

Пример. Элемент управления «ToggleContent», который отображает UserControl1, когда отмеченное состояние не отмечено, и UserControl2, когда отмеченное состояние проверено.

XAML может выглядеть примерно так:

        <ToggleContent>
            <ToggleContent.ContentUnchecked>
                <local:UserControl1></local:UserControl1>
            </ToggleContent.ContentUnchecked>
            <ToggleContent.ContentChecked>
                <local:UserControl2></local:UserControl2>
            </ToggleContent.ContentChecked>
        </ToggleContent>

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Вы можете создать стиль для CheckBox или ToggleButton, заменить ContentPresenter внутри стиля на пользовательские элементы управления и изменить их видимость в CheckStates.

1 голос
/ 09 марта 2012

Я не уверен, что означает «нет кода позади», но это звучит как идеальный пример использования ValueConverter и изменения видимости в зависимости от состояния проверки.Это будет выглядеть примерно так:

<StackPanel>
    <CheckBox x:Name="MyCheckBox"/>
    <local:UserControl1 Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVis}, ConverterParameter=False">
    <local:UserControl2 Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVis}, ConverterParameter=True">

Конвертер:

public class BooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return Visibility.Collapsed;

        bool comparer = true;
        if(parameter != null)
        {
            comparer = System.Convert.ToBoolean(parameter);
        }
        return System.Convert.ToBoolean(value) == comparer ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Вот хороший пост от Джеффа Уилкокса о преобразователях значений

0 голосов
/ 08 марта 2012

id создайте пользовательский элемент управления на основе флажка и используйте visualstatemanager для загрузки элементов управления.

...