WPF 在编辑时设置默认可见性值

Posted

技术标签:

【中文标题】WPF 在编辑时设置默认可见性值【英文标题】:WPF set default Visibility value when editing 【发布时间】:2019-10-26 22:27:39 【问题描述】:

我将 Visibility 绑定到一个布尔值,它工作得很好。但是,在编辑页面时,边框不可见。我必须删除可见性绑定,进行更改并重做可见性绑定。

我很确定我看到有一种方法可以设置“编辑默认值”,但我再也找不到那个链接了(或者记得它叫什么)。谁能解释一下如何将默认设置为可见,以便我可以在编辑时看到它,但不影响它在运行时的操作?

<Border Grid.Column="2" BorderBrush="HotPink" BorderThickness="2" MinHeight="100" MinWidth="100" 
                Visibility="Binding ElementName=GenerateWorkOrders, Path=IsChecked, Converter=StaticResource booleanToVisibility, UpdateSourceTrigger=PropertyChanged">
            <Label Content="Not Visible While Editing"/>
        </Border>

【问题讨论】:

“编辑页面”是指在 Visual Studio 中使用 Designer 时吗?你可能想检查这个answer Generateworkorders 默认情况下可能未选中。您可以将其设置为选中,或者将其 ischecked 的 fallbackvalue 值设置为 true。 是 VS 中的设计器模式,我相信 FallbackValue 是我一直在寻找的,但这似乎没有任何作用:Visibility="Binding ElementName=GenerateWorkOrders, Path=IsChecked, Converter= StaticResource booleanToVisibility,UpdateSourceTrigger=PropertyChanged,FallbackValue=Visible" 。我做错了吗? 你试过TargetNullValue吗? 我不熟悉,但看起来很有趣。能介绍一下怎么用吗? 【参考方案1】:

问题是GenerateWorkOrdersCheckBoxIsChecked默认值为false

如果IsCheckedBinding,则可以使用FallbackValue

<CheckBox x:Name="GenerateWorkOrders" IsChecked="Binding SomeProperty, FallbackValue=True" />

另一种方法是避免绑定,您可以使用 DesignerProperties.IsInDesignMode 附加属性来指示您是否处于设计模式 (More inforamtion)。

您可以在行为中或仅在 XAML 方法中使用此属性:

    <Border Grid.Column="2" BorderBrush="HotPink" BorderThickness="2" MinHeight="100" MinWidth="100">
        <Border.Style>
            <Style TargetType="x:Type Border">
                <Setter Property="Visibility" Value="Binding ElementName=GenerateWorkOrders, Path=IsChecked, Converter=StaticResource booleanToVisibilityConverter, UpdateSourceTrigger=PropertyChanged" />
                <Style.Triggers>
                    <DataTrigger Binding="Binding RelativeSource=RelativeSource Self, Path=(componentModel:DesignerProperties.IsInDesignMode)" Value="true">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <Label Content="Not Visible While Editing"/>
    </Border>

【讨论】:

谢谢!我把 FallbackValue 放在了错误的控件上......我没有把它放在复选框上(就像你展示的那样),我试图把一个 FallbackValue 放在边框的 Visibility 属性中。

以上是关于WPF 在编辑时设置默认可见性值的主要内容,如果未能解决你的问题,请参考以下文章

WPF 可见性折叠保留空间

WPF 绑定不更新可见性

WPF XAML 网格可见性触发器

在菜单项的可见性模式之间进行动画处理

在 RowDetailsTemplate 中隐藏/折叠图像

如何设置绑定到文本框的标签的可见性?