【问题标题】:WPF XAML - Design time and visibility of textboxWPF XAML - 文本框的设计时间和可见性
【发布时间】:2019-12-23 10:32:36
【问题描述】:

我将 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”是否是正确的方法......

【问题讨论】:

  • 使 radiobutton1 被选中为真。通过在其绑定上设置或使用 fallbackvalue。

标签: c# wpf xaml datatrigger


【解决方案1】:

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

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

例子:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这是一种解决方法:

      <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}"
      

      【讨论】:

        猜你喜欢
        • 2022-10-20
        • 2012-05-15
        • 1970-01-01
        • 2021-08-15
        • 2011-08-10
        • 1970-01-01
        • 2013-09-23
        • 2013-12-09
        • 1970-01-01
        相关资源
        最近更新 更多