プロパティに従って条件付きで UserControl をロードしたい。プロパティが "true" の場合、XAML で UserControl を読み込みます。プロパティの名前がIsCameraSupported
. XAMLファイルに完全に含めたくないので、に設定するVisibility
ことは正しい解決策ではありCollapsed
ません。
XAML のみでこれを行うためのコード例を教えてもらえますか?
どうもありがとうございました。
EDIT 一見したところ、質問を誤解しました。これは更新された応答です。
フレームコントロールを使用できます。フレーム コントロールでは、カメラ コントロールを持つページに移動できます。
ビューモデルからビューメソッドを呼び出す方法
元の答え
BooleanToVisibilityConverter を作成し、DataBinding を使用できます。
http://www.rhyous.com/2011/02/22/binding-visibility-to-a-bool-value-in-wpf/
http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx
コンバーターコード
public class BooleanVisibilityConverter : IValueConverter
{
#region Constructors
public BooleanVisibilityConverter()
: this(true)
{ }
public BooleanVisibilityConverter(bool collapseWhenInvisible)
: base()
{
CollapseWhenInvisible = collapseWhenInvisible;
}
#endregion
#region Properties
public bool CollapseWhenInvisible { get; set; }
public Visibility FalseVisibility
{
get
{
if (CollapseWhenInvisible)
return Visibility.Collapsed;
else
return Visibility.Hidden;
}
}
#endregion
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Visible;
if ((bool)value)
return Visibility.Visible;
else
return FalseVisibility;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return true;
return ((Visibility)value == Visibility.Visible);
}
#endregion
}
私はあなたの場合にセットでContentControl
を使用しますDataTrigger
ContentTemplate
UserControl
IsCameraSupported
True
<DataTemplate x:Key="MyUserControlTemplate">
<local:MyUserControl />
</DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Property="{Binding IsCameraSupported}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource MyUserControlTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
yr bool が true の場合に可視性を折りたたむように設定するトリガーまたはコンバーター クラスを使用します。
実行時にこれを行うことができます
if(IsCameraSupported)
{
var myControl = new MyControl();
MyCanvas.Children.Add(myControl);
Canvas.SetLeft(myControl, 20);
Canvas.SetTop(myControl, 20);
}