我想根据属性有条件地加载用户控件。如果该属性为“true”,那么我们将用户控件加载到XAML中。假设该酒店被命名为:IsCameraSupported
。将Visibility
设置为Collapsed
如果不是是正确的解决方案,因为我完全不希望将其包含在XAML文件中。有条件地加载用户控件
有人可以给我一个代码示例来做到这一点,只在XAML?
非常感谢。
我想根据属性有条件地加载用户控件。如果该属性为“true”,那么我们将用户控件加载到XAML中。假设该酒店被命名为:IsCameraSupported
。将Visibility
设置为Collapsed
如果不是是正确的解决方案,因为我完全不希望将其包含在XAML文件中。有条件地加载用户控件
有人可以给我一个代码示例来做到这一点,只在XAML?
非常感谢。
使用触发器或设置能见度倒塌时年布尔运行时也是如此
一个转换器类哟能做到这一点
if(IsCameraSupported)
{
var myControl = new MyControl();
MyCanvas.Children.Add(myControl);
Canvas.SetLeft(myControl, 20);
Canvas.SetTop(myControl, 20);
}
编辑 我误解了这个问题乍看。这是更新后的回复。
您可以使用框架控件。在框架控件中,您可以导航到具有相机控件的页面。
如何从视图模型
原来的答案
您可以创建BooleanToVisibilityConverter,并使用数据绑定。
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
}
设置可见性不是解决方案,因为它仍将加载UserControl并执行一些初始化过程。 –
我会用一个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>
看来你还没有明白我的意思。如果属性为false,我不想包含UserControl。将可见性设置为折叠状态仍将加载UserControl,但不可见并且不占用空间。 –
而且你绝对不想在运行时使用代码/设置代码 – JohnnBlade