[英]WPF XAML - Design time and visibility of textbox
我将 Visual Studio 2019 与 WPF/MVVM 结合使用。
我已经为一个文本框设置了一个触发器来控制它的可见性。 并且在运行时这运行良好,触发器检查单选按钮的状态并根据单选按钮的状态设置文本框的可见性。
但在设计期间,此文本框不可见。 我怎样才能让这个文本框在设计时可见?
这是我用于触发器的 XAML:
<Style x:Key="text" TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Radiobutton1, Path=IsChecked}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Radiobutton1, Path=IsChecked}" Value="false">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
<TextBox Style="{StaticResource text}" Text="test..... />
我发现这篇文章https://social.msdn.microsoft.com/Forums/en-US/cacc5c30-8aa0-43c5-ad07-b063028653a2/designmode-and-visibility?forum=wpf并使用“DesignerProperties.IsInDesignMode "但我无法运行此程序,出现诸如“无法将数据触发器添加到 setterbasecollection”之类的错误。
另外我不知道“DesignerProperties.IsInDesignMode”是否是正确的方法......
这是一种解决方法:
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Radiobutton1, Path=IsChecked}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=Radiobutton1, Path=IsChecked}" Value="false">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Designtime}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
然后在Viewmodel中:
public bool Designtime { get; set; }
public ViewModel()
{
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
Designtime = true;
}
}
并在窗口标签中
d:DataContext="{d:DesignInstance {x:Type local:ViewModel},IsDesignTimeCreatable=True}"
我认为答案更简单。 通过添加d:Visibility="Visible"
,文本框将在设计时可见。
<TextBox d:Visibility="Visible" Style="{StaticResource text}" Text="test..... />
您可以使用 Blend 命名空间IsHidden
属性:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:IsHidden="True"
属性例子:
<TextBox Style="{StaticResource text}" Text="test....." d:IsHidden="True"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.