wpf - System.Windows.Visibility 折叠与隐藏

标签 wpf user-interface layout wpf-controls

我有一个将可见性设置为“Collapsed”的控件和一个可以更改 Visibility.Collapsed 和 Visibility.Hidden 之间的可见性的 ToggleButton。根据MSDN Documentation当控件的可见性设置为“折叠”时,布局内不应为该控件分配空间,但两个枚举之间没有视觉差异。此外,控件的可见性最初设置为 Collapsed,因此控件的初始绘制不应为控件分配任何空间。

我是否缺少一个概念,或者如何让元素仅在可见时占用空间?我的最终目标是让控件根据出现在所述显示变化控件以北的用户选择的条件显示,并且所有控件之间的边距保持一致。

XAML 片段:

<StackPanel>
    <TextBox Name="hideTest" DataContext="{StaticResource persistentMemoryBridge}"   Text="HIDETEST" Margin="0,327,31,491" Foreground="Black" Background="Orange" Visibility="Collapsed" />
    <TextBox DataContext="{StaticResource persistentMemoryBridge}"   Text="{Binding Path=PropertyTest}" Margin="0,386,31,432" Foreground="Black" Background="Yellow"/>
    <ToggleButton Name="tbVisibility" Content="Toggle" Click="ToggleButton_Click" Margin="0,445,65,391"></ToggleButton>
</StackPanel>

隐藏代码:

private void ToggleButton_Click(object sender, RoutedEventArgs e) {

        switch (hideTest.Visibility) {
            case System.Windows.Visibility.Collapsed: {
                hideTest.Visibility = Visibility.Hidden;
                tbVisibility.Content = "Hidden";
                break;    
            }
        case System.Windows.Visibility.Hidden: {
            hideTest.Visibility = Visibility.Visible;
            tbVisibility.Content = "Visible";    
            break;
            }
        case System.Windows.Visibility.Visible: {
            hideTest.Visibility = Visibility.Collapsed;
            tbVisibility.Content = "Collapsed";
            break;
            }
        }
    }

最佳答案

当 contol 的可见性处于 Collapsed 状态时,其边距不参与布局(与 Hidden 状态相反)

可以轻松验证:

<Window x:Class="MarginsRespectForCollapsedTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button Margin="50,50" Visibility="Collapsed">I'm Collapsed</Button>
        <Button>I'm Visible!</Button>
    </StackPanel>
</Window>

我同意 HighCore 的观点,您的 XAML 确实看起来就像您刚刚从工具箱面板中拖动控件一样。 VS 的 XAML 设计器有一个令人不快的功能:它尝试借助边距来定位控件。

关于wpf - System.Windows.Visibility 折叠与隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388777/

相关文章:

mongodb - 什么是 spring-boot 和 mongoDB 的管理 UI,提供像 django-admin 一样的 CRUD 操作?

c++ - QGraphicsScene 中的 QGraphicsView 大小

r - ggplot2 facet_grid 排列面板

html - 让<div>填充剩余高度

java - 帮助布局类型

wpf - 在 DataTemplate DataType 中使用命名空间

wpf - 如何使 TextBlock 成为可选择的,以便用户可以复制其文本

c# - 带管理等待的 Gui 重入

WPF TreeView 想要在选择父级时选择第一个子级

c# - WPF 获取组合框选定的文本(MVVM)