2016-08-05 22 views
0

Ich habe ein Raster, wo ich versuche, eine Zeile, die ein Textfeld enthält mit C# als meinen Code hinter verstecken. Mein Endziel ist eine Möglichkeit zu finden, Text in das Textfeld zu setzen, während die Zeile ausgeblendet ist. Es kann zu Problemen kommen, wo wpf es nicht erlaubt Text in einem Textfeld zu setzen, wenn die Größe des Textfelds kleiner als die Schriftgröße ist. Das ist, was ich habe, so weit:XAML C# Raster ausblenden Zeile

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"; 
     } 
    } 
} 

Von dem, was ich gelesen habe, sollte diese Arbeit. Ich erhalte jedoch einen Fehler bezüglich "RowDefinitions (1)". Der Fehler lautet: "Nicht aufrufbares Mitglied 'Grid.RowDefinitions' kann nicht wie eine Methode verwendet werden." Irgendwelche Ideen?

Vielen Dank im Voraus!

Antwort

1

In C# ist der Indizierungsoperator [], nicht parens. Parens ist Methodenaufruf.

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

Auch Indizes beginnen bei Null. 1 ist der zweite Punkt, nicht der erste. Nicht sicher, ob du das wusstest, aber die Parens sehen aus wie VB.

Das ist sehr wichtig, da AddressBar nur eine Zeile und KEINE Zeilendefinitionen enthält. dieser hat Spalten, der andere Zeilen. Das ist jedoch leicht zu beheben.

Wenn Sie diese ganze Gitter nur verstecken wollen, ist das ein Kinderspiel:

AddressBar.Visibility = Visibility.Collapsed; 

Aber Sie werden wahrscheinlich wollen die erste Zeile in der äußeren Gitter Height = „Auto“ haben, so dass es entlang kollabiert mit seinem Inhalt.

Sie werden dieses Dimensionierungsproblem mit dem Textfeld nicht lösen (WPF liebt es, Dinge zu verstecken), aber in jedem Fall würde es mehr Sinn machen, die Zeilenhöhe im XAML auf Auto zu setzen und die Sichtbarkeit der TextBox auf Collapsed zu setzen wenn du willst, dass es weg ist. Mit Height = "Auto" wird die Zeile auf ihren Inhalt eingestellt. Wenn der Inhalt zusammenbricht, keine Zeile.

+0

Oh duh, wie habe ich das nicht verstanden! Leider bekomme ich einen Out-of-bounds-Fehler mit den Klammern. Ich sollte folgendes schreiben können: AddressBar.Height = new GridLength (0); Aber in diesem Szenario erhielt ich den Fehler: Kann Typ System.Window.GridLength nicht implizit zu "double" konvertieren. – user5890660

+0

@ user5890660 Oh, rechts, AddressBar hat überhaupt keine RowDefinitions. Das andere Raster hat Zeilendefinitionen, AddressBar hat nur Spaltendefinitionen. –

+0

@ user5890660 Höhen nicht ein GridLength-Wert, nur ein Doppel. Es ist in Ordnung, ihm eine alte Null zuzuordnen - oder besser noch, Visibility.Collapsed der Eigenschaft Visibility zuzuweisen. –

Verwandte Themen