2012-01-23 71 views
1

我有一個類似的網格:爲什麼WPF網格的行高不調整爲其內容的高度?

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <TextBlock Grid.Row="0" Grid.Column="0" Text="MyHeader1"/> 
    <myNamespace:MyRotatedTextBlock 
     Grid.Row="1" Grid.Column="0" MyText="MyHeader2"/> 
</Grid> 

和myNameSpace對象:MyRotatedTextBlock是一個自定義WPF控件這樣的:

<TextBlock Text="{Binding MyText}" 
    HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <TextBlock.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </TextBlock.LayoutTransform> 
</TextBlock> 

問題是,當我打開窗戶,我看不到包含旋轉文本的第二行。但是,如果我更換第二排與"100"(被設置爲"Auto")的Height話,我可以看到第二行顯示,它包含MyHeader2

+1

請問你控制包含任何文字? TextBlock應該自動調整其內容的大小。我可以看到,您已將控件的Text屬性綁定到「MyText」,並且您將該屬性設置爲「MyHeader2」 - 您的自定義控件中的文本綁定可能是否存在問題? –

+0

(我編輯了這個問題。)不,它被正確綁定,因爲它是我手動擴展行的高度時顯示的。 – Bijan

+0

爲什麼你實際上引入了一個新的屬性MyText,而不是使用TextBlock的Text屬性(你可能從中派生出來的)? –

回答

1

您也可以從TextBlock的(而不是用戶控件)導出後:

<TextBlock x:Class="WpfGridRowHeightStackOverflowQuestion.MyRotatedTextBlock" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center"> 
    <TextBlock.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </TextBlock.LayoutTransform> 
</TextBlock> 

然後,只需使用Text屬性從TextBlock的是這樣的:

<myNamespace:MyRotatedTextBlock Grid.Row="1" Grid.Column="0" Text="MyHeader2"></myNamespace:MyRotatedTextBlock> 

編輯

這樣它可以作爲一個用戶控件以及(因爲b的的ElementName inding明確指定用戶控件的名稱):

<UserControl x:Class="WpfGridRowHeightStackOverflowQuestion.MyRotatedTextBlock" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
         Name="CustomRotatedTextBlock"> 
    <TextBlock Text="{Binding ElementName=CustomRotatedTextBlock,Path=MyText}" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <TextBlock.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </TextBlock.LayoutTransform> 
    </TextBlock> 
</UserControl> 

然後,我落後了INotifyPropertyChanged的(這WPF依賴於大量使用更改通知代碼;)

public partial class MyRotatedTextBlock : UserControl, INotifyPropertyChanged 
{ 
    public MyRotatedTextBlock() 
    { 
     InitializeComponent(); 
    } 

    private String _myText; 
    public String MyText 
    { 
     get { return _myText; } 
     set { 
      _myText = value; 

      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("MyText")); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 
} 
+0

我沒有複製您的項目,並且(現在)無法讓它與UserControl一起工作。但我仍然會看看它... –

+0

根據我的觀察,它與綁定有關。當你在用戶控件的xaml中簡單地使用繼承的Text屬性(而不是綁定到MyText)時,它工作正常。 –

+0

'MyText'屬性是由Visual Studio Snippet'propdp'創建的一個簡單的'DependencyProperty'。我找不到任何相關的配置。 – Bijan

0

你嘗試UpdateLayout?嘗試UpdateLayout請網格像這樣打開窗戶

+0

它沒有工作,雖然它應該工作! – Bijan

+0

-1這實在太重了。這個問題有一個更簡單的原因。 –

相關問題