0

現在の CheckState (checked、unchecked、indeterminate) に基づいてコントロールの内容を変更したいと考えています。可能であれば、XAML のみを使用し、コード ビハインドを必要としないソリューションを希望します。

どのコントロールを使用し、複数のコンテンツ セットを定義する方法を考えています。

例: チェックされた状態が Unchecked のときに UserControl1 を表示し、チェックされた状態が Checked のときに UserControl2 を表示する "ToggleContent" コントロール。

XAML は次のようになります。

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

3 に答える 3

1

CheckBoxまたはにスタイルを作成し、スタイル内をUserControlsToggleButtonに置き換えてContentPresenter、CheckStatesでの表示を変更できます。

于 2012-03-08T14:48:41.957 に答える
1

「コードビハインドなし」が何を意味するのかはわかりませんが、これは 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();
    }
}

これは、値コンバーターに関するJeff Wilcoxの素敵な投稿です。

于 2012-03-09T19:03:32.767 に答える
0

チェックボックスに基づいてユーザー コントロールを作成し、visualstatemanager を使用してコントロールを読み込みます。

于 2012-03-07T20:20:46.250 に答える