XAML C# 隐藏网格行

XAML C# Hide Grid Row

我有一个网格,我试图在其中隐藏包含使用 c# 作为我的代码的文本框的行。 我的最终目标 是找到一种方法来在文本框中设置文本,同时隐藏该行。如果文本框的大小小于字体大小,我可能会 运行 遇到 wpf 不允许在文本框中设置文本的问题。这是我目前所拥有的:

XAML:

Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="100"/>
    </Grid.RowDefinitions>

    <Button x:Name="Button1"
                Grid.Row="2"
                Grid.Column="1"
                Width="100"
                Height="50"
                Click="OnClick"
                Content="Hide Middle Row"/>

    <Grid x:Name="AddressBar" Grid.Row="1" Grid.Column="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

      <TextBlock x:Name="Block1"
                FontSize="16"
                Grid.ColumnSpan="3"
                HorizontalAlignment="Center"
                TextAlignment="Center"/>

    </Grid>
</Grid>

C#:

namespace rowCollapseTest
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OnClick(object sender, RoutedEventArgs e)
        {
            AddressBar.RowDefinitions(1).Height = new GridLength(0);
            AddressBar.Visibility = Visibility.Collapsed;
            Block1.Text = "This is a test";
        }
    }
}

根据我的阅读,这应该可行。但是,我收到有关 "RowDefinitions(1)" 的错误消息。错误显示:"Non-invocable member 'Grid.RowDefinitions' cannot be used like a method."有什么想法吗?

提前致谢!

在 C# 中,索引运算符是 [],而不是括号。 Parens 是方法调用。

AddressBar.RowDefinitions[1].Height = new GridLength(0);

此外,索引从零开始。 1 是第二项,不是第一项。不确定你是否知道,但是括号看起来像 VB。

这很重要,因为 AddressBar 只有一行,而且根本没有行定义;一个有列,另一个有行。不过这很容易修复。

如果您只想隐藏整个网格,那很简单:

AddressBar.Visibility = Visibility.Collapsed;

但是您可能希望外部网格中的第一行具有高度="Auto",因此它会与其内容一起折叠。

您不会 运行 遇到文本框的大小问题(WPF 喜欢隐藏东西),但无论如何,在 [=27] 中将行高设置为自动对 WPF 更有意义=] 并在您希望它消失时将文本框的可见性设置为折叠。使用 Height="Auto",该行将根据其内容自行调整大小。如果内容折叠,则没有行。