Silverlight Control CheckStateに基づいてコンテンツを変更する(複数のContentSpresentersを切り替える)
-
09-12-2019 - |
質問
現在のチェックステート(チェックされ、チェックされていない、不確定)に基づいてコントロールの内容を変更したいと思います。可能であれば、解決策はXAMLのみを使用し、その背後にあるコードを必要としません。
どのコントロールを使用するか、複数のコンテンツセットを定義する方法を疑問に思います。
例:チェックされた状態がチェックされていないときにUserControl1を表示し、チェック状態がチェックされている場合はUserControl1を表示する「TogGlecontent」コントロール。
XAMLはこのようなものに見えるかもしれません:
<ToggleContent>
<ToggleContent.ContentUnchecked>
<local:UserControl1></local:UserControl1>
</ToggleContent.ContentUnchecked>
<ToggleContent.ContentChecked>
<local:UserControl2></local:UserControl2>
</ToggleContent.ContentChecked>
</ToggleContent>
. 解決
「後ろのコードなし」とはどういうわけかという意味ではなく、これはバレコンバーターを使用し、チェック状態に基づいて可視性を変更するための完璧な例のように聞こえます。 それはこのようなものを見るでしょう:
<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 の投稿コンバータ
他のヒント
CheckBox
またはToggleButton
にスタイルを作成し、スタイル内のContentPresenter
をUserControlで置き換えて、チェックステートでの可視性を変更します。
IDチェックボックスに基づいてユーザコントロールを作成し、VisualStateManagerを使用してコントロールをロードします。
所属していません StackOverflow