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

3
我使用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不能添加到setterbasecollection”之类的错误。
此外,我不知道“DesignerProperties.IsInDesignMode”是否是正确的方法...

通过设置或使用绑定的fallbackvalue,使radiobutton1被选中为true。 - Andy
3个回答

6

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

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

1
这是一个解决方法:
<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}"

0

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

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

示例:

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

这与他想要的相反。他希望在设计时可见。 - Rob K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接