WPF XAML - 文本框的设计时间和可见性

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" 做了一些测试,但我做不到 运行,我收到类似 "datatrigger can not be added to setterbasecollection".[=13= 的错误]

我也不知道"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>

然后在视图模型中:

public bool Designtime { get; set; }

public ViewModel()
{
    if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
    {
        Designtime = true;
    }
}

并在 Window 标签中

d:DataContext="{d:DesignInstance {x:Type local:ViewModel},IsDesignTimeCreatable=True}"

我认为答案更简单。通过添加 d:Visibility="Visible",文本框将在设计时可见。

<TextBox d:Visibility="Visible" Style="{StaticResource text}"  Text="test..... />

您可以使用 Blend 命名空间 IsHidden 属性:

  • 如果缺少 Blend 命名空间,请添加:xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  • 在设计时为要隐藏的元素添加 d:IsHidden="True" 属性

示例:

<TextBox Style="{StaticResource text}"  Text="test....." d:IsHidden="True"/>