2016-08-05 5 views
0

У меня есть сетка, где я пытаюсь скрыть строку, которая содержит текстовое поле с использованием C# в качестве моего кода. Моя конечная цель - это найти способ установить текст в текстовом поле, пока строка скрыта. Я могу столкнуться с проблемами, когда wpf не позволяет устанавливать текст в текстовое поле, если размер текстового поля меньше размера шрифта. Это то, что я до сих пор:XAML C# Hide Grid Row

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

В C# оператор индексации [], а не parens. Parens - вызов метода.

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

Кроме того, индексы начинаются с нуля. 1 - второй элемент, а не первый. Не уверен, знаете ли вы это, но parens выглядят как VB.

Это имеет большое значение, поскольку AddressBar имеет только одну строку и NO-определения строк; что один имеет столбцы, другой имеет строки. Это легко исправить.

Если вы просто хотите, чтобы скрыть всю эту сетку, это несложно:

AddressBar.Visibility = Visibility.Collapsed; 

Но вы, вероятно, будете хотеть первый ряд во внешней сетке иметь Height = «Auto», поэтому она разрушается вместе с его содержанием.

Вы не столкнетесь с этой проблемой калибровки с текстовым полем (WPF любит скрывать вещи), но в любом случае это создало бы больше смысла WPF, чтобы установить высоту строки в Auto в XAML и установить видимость TextBox для свертывания когда вы хотите, чтобы он исчез. С Height = "Auto" строка будет сама по себе соответствовать ее содержимому. Если содержимое рушится, строки нет.

+0

Ох, как я этого не поймал! К сожалению, я получаю ошибку за пределы, используя скобки. Я должен уметь написать это как: AddressBar.Height = new GridLength (0); Но в этом случае я получил ошибку: Не могу неявно преобразовать тип System.Window.GridLength в «double». – user5890660

+0

@ user5890660 О, правильно, AddressBar вообще не имеет параметров RowDefinitions. Другая сетка имеет определения строк, AddressBar имеет только определения столбцов. –

+0

@ user5890660 Высота не значение GridLength, просто двойное. Присвоение ему простого старого нуля - или еще лучше - присвойте Visibility.Collapsed свойству видимости. –