【问题标题】:System.Windows.Visibility Collapsed vs HiddenSystem.Windows.Visibility 折叠与隐藏
【发布时间】:2013-01-01 13:32:51
【问题描述】:

我有一个将 Visibility 设置为“Collapsed”的控件和一个用于更改 Visibility.Collapsed 和 Visibility.Hidden 之间可见性的 ToggleButton。根据MSDN Documentation,当控件的可见性设置为“折叠”时,布局内不应为控件分配空间,但两个枚举之间没有视觉差异。此外,控件的 Visibility 最初设置为 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;
            }
        }
    }

【问题讨论】:

  • 不要这样使用边距。使用其他类型的容器,例如 Grid 或 DockPanel
  • 这条评论有点不清楚。如果顶部/底部和控件的边距通常为 10。高度 50. 已折叠,堆叠控件之间的预期边距应为 20,而不是 70。
  • 不过,不要使用这样的边距。期间。
  • Margin="0,386,31,432"是什么布局??看起来您在设计器中拖放了 UI 元素。 WPF 不适用于拖放器。
  • @sammarcow 即使控件已折叠,也很有可能会尊重边距。检查这个。

标签: wpf user-interface layout wpf-controls


【解决方案1】:

当控件的可见性处于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 设计器有一个令人不快的特性:它试图借助边距来定位控件。

【讨论】:

  • 我输入了 XAML,然后去找设计人员快速定位元素,以便学习控件和 WPF 架构。我意识到现在这是一个错误。折叠(以及 StackPanel 中所有控件的边距)属性现在得到尊重。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多