我想根据属性有条件地加载UserControl。如果属性为“true”,那么我们在XAML中加载UserControl。假设该属性命名为:IsCameraSupported
。将Visibility
设置为Collapsed
NOT 应该是正确的解决方案,因为我完全不希望将其包含在XAML文件中。
有人可以在XAML中为我提供代码示例吗?
非常感谢。
答案 0 :(得分:0)
修改强> 我乍看之下误解了这个问题。这是更新的回复。
您可以使用Frame控件。在“帧”控件中,您可以导航到具有摄像机控制的“页面”。
如何从View模型中调用view方法
原始回答
您可以创建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)
如果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>
{{1}}