1

プロパティに従って条件付きで UserControl をロードしたい。プロパティが "true" の場合、XAML で UserControl を読み込みます。プロパティの名前がIsCameraSupported. XAMLファイルに完全に含めたくないので、に設定するVisibilityことは正しい解決策ではありCollapsedません。

XAML のみでこれを行うためのコード例を教えてもらえますか?

どうもありがとうございました。

4

3 に答える 3

0

EDIT 一見したところ、質問を誤解しました。これは更新された応答です。

フレームコントロールを使用できます。フレーム コントロールでは、カメラ コントロールを持つページに移動できます。

ビューモデルからビューメソッドを呼び出す方法

  1. ビュー モデルの IsCameraSupported セッターからイベントを発生させます。
  2. ビューをビュー モデル イベントにサブスクライブする
  3. ビュー コード ビハインドのイベント ハンドラーで Frame.Navigate を呼び出します。

元の答え

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
}
于 2012-07-05T06:56:43.923 に答える
-1

私はあなたの場合にセットでContentControlを使用しますDataTriggerContentTemplateUserControlIsCameraSupportedTrue

<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>
于 2012-07-05T13:35:26.247 に答える
-1

yr bool が true の場合に可視性を折りたたむように設定するトリガーまたはコンバーター クラスを使用します。

実行時にこれを行うことができます

if(IsCameraSupported)
{
    var myControl = new MyControl();
    MyCanvas.Children.Add(myControl);
    Canvas.SetLeft(myControl, 20);
    Canvas.SetTop(myControl, 20);

}
于 2012-07-05T06:56:31.970 に答える