2016-08-05 57 views
0

我有一個網格,我試圖隱藏一個包含使用c#的文本框作爲我的代碼後面的一行。 我的最終目標的目的是找到一種方法來設置文本在行隱藏隱藏的文本框中。如果文本框的大小小於字體大小,我可能會遇到wpf不允許在文本框中設置文本的問題。這是我到目前爲止有:XAML C#隱藏網格行

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只有一行,並且根本沒有行定義;一個有列,另一個有行。雖然這很容易解決。

如果你只想隱藏全網,這是一個管理單元:

AddressBar.Visibility = Visibility.Collapsed; 

但你可能會希望在外部電網的第一行,從而具有高度=「自動」,所以它一起崩潰與其內容。

你不會遇到文本框的大小問題(WPF喜歡隱藏東西),但是在任何情況下,在XAML中將行高設置爲自動並將TextBox的可見性設置爲摺疊當你想讓它消失的時候。隨着高度=「自動」,該行將自己的大小內容。如果內容崩潰,則不行。

+0

噢,呃,我怎麼沒有抓到!不幸的是,我使用方括號出現了界限錯誤。我應該可以這樣寫: AddressBar.Height = new GridLength(0); 但在這種情況下,我收到了錯誤:無法隱式地將類型System.Window.GridLength轉換爲'double'。 – user5890660

+0

@ user5890660哦,對,AddressBar根本沒有RowDefinitions。另一個網格有行定義,AddressBar只有列定義。 –

+0

@ user5890660高度不是GridLength值,只是雙倍值。將簡單的舊零分配給它是好的 - 或者更好的是,將Visibility.Collapsed分配給其可見性屬性。 –