簡體   English   中英

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 "但我無法運行此程序,出現諸如“無法將數據觸發器添加到 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屬性:

  • 如果缺少,請添加 Blend 命名空間: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM