有条件地加载UserControl

时间:2012-07-05 06:52:33

标签: c# wpf

我想根据属性有条件地加载UserControl。如果属性为“true”,那么我们在XAML中加载UserControl。假设该属性命名为:IsCameraSupported。将Visibility设置为Collapsed NOT 应该是正确的解决方案,因为我完全不希望将其包含在XAML文件中。

有人可以在XAML中为我提供代码示例吗?

非常感谢。

3 个答案:

答案 0 :(得分:0)

修改 我乍看之下误解了这个问题。这是更新的回复。

您可以使用Frame控件。在“帧”控件中,您可以导航到具有摄像机控制的“页面”。

如何从View模型中调用view方法

  1. 从View Model中的IsCameraSupported setter触发事件。
  2. 订阅查看以查看模型事件
  3. 在视图代码后面的事件处理程序中调用Frame.Navigate。
  4. 原始回答

    您可以创建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
    }
    

答案 1 :(得分:-1)

使用Trigger或Converter类设置当yr bool为true时崩溃的可见性

在运行时期间你可以做到这一点

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

}

答案 2 :(得分:-1)

如果ContentControlDataTrigger

,我会使用ContentTemplateUserControlIsCameraSupported设置为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>
{{1}}