XAML C#隐藏网格行

时间:2016-08-05 03:09:25

标签: c# wpf xaml grid-layout

我有一个网格,我试图隐藏一个包含文本框的行,使用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)”的错误。错误内容为:“非可调用成员'Grid.RowDefinitions'不能像方法一样使用。”有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

在C#中,索引操作符是[],而不是parens。 Parens是方法调用。

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

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

这很重要因为AddressBar只有一行,而且根本没有行定义;一个有列,另一个有行。虽然这很容易解决。

如果你只想隐藏整个网格,那就很容易了:

AddressBar.Visibility = Visibility.Collapsed;

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

你不会遇到文本框的大小调整问题(WPF喜欢隐藏内容),但无论如何,在XAML中将行高设置为Auto并设置TextBox&#39会使WPF更有意义。 ;当你希望它消失时,可见性崩溃。使用Height =&#34; Auto&#34;,该行将自己调整为其内容。如果内容崩溃,则没有行。