2016-05-18 12 views
2

私はスケーリングViewboxとTextblockという2つの要素を持つグリッドを持っています。私は、Viewboxに必要なスペースだけを取ってもらいたいだけでなく、それが得ることができるスペースだけを持っていたいと思っています。UWP XAML:2つの要素、1つのビューボックスで画面を塗りつぶし

画像はまず、それがはるかに優れ、所望の画像を説明します。私は自分のアプリケーションが広くなるようにサイズを変更する場合
The way I want it to work
はしかし、ビューボックスは、その下のTextBlockを追い越すために開始します。
The Viewbox overtaking the Textblock

ここです私のXAMLのバージョンダウン易しく書き直さ:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="MainGrid" Margin="0" UseLayoutRounding="False"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="0" /> 
    </Grid.ColumnDefinitions> 

    <Viewbox Stretch="Uniform" VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Row="0" x:Name="Zulrah"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <Rectangle Grid.Column="0" Fill="Blue" Width="150" Height="250" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
      <Rectangle Grid.Column="1" Fill="Red" Width="150" Height="250" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
     </Grid> 
    </Viewbox> 
    <TextBlock Grid.Row="1" x:Name="TextOutput" MinHeight="100" MinWidth="100"> 
     Hello world! 
     <LineBreak /> 
     Life's good 
    </TextBlock> 
</Grid> 

をあなたは多かれ少なかれ(幅=「0」との)第二のカラムを無視することができ、それは時にアプリケーションシートのために使われていますイオンはワイドスクリーン(または風景)になります。これは、同じ問題があります:
要するに The same issue happens when entering 'portrait' mode

:私は、TextBlockのはまだビューボックスが使用するスペースを最大化しながら、それは、=「100」minHeightのだ従いたいです。

PS:一部の設定では、実際に画面に収まるサイズよりも大きなサイズにViewboxが調整されますが、これは望ましくありません。

編集:驚くべき、2行目のminHeightの=「100」は効果がありません設定...

+0

固定またはMainGrid第二行のパーセンテージの高さはあなたのために適していない設定? – Eins

+0

このようにすると、特定のウィンドウサイズでhttp://puu.sh/oXckj.pngのような無駄なスペースになります。 – ManIkWeet

答えて

3

あなたのコード内ThemeResourceを使用しているので、私はあなたにそこUWPアプリを開発していると思いますWPFではThemeResourceではありません。もしそうなら、あなたのタイトルとタグのWPFを2つの異なるフレームワークとして削除してください。 UWPとWPFを混在させると、混乱の原因となることがあります。

GridのUWPアプリケーションの場合、行の高さをに設定すると、の行はその内容に合わせてサイズが変更されます。 Auto行が計算された後、高さが*に設定された行は残りの高さの一部になります。

あなたの説明によると、TextBlockMinHeightに従い、残りの高さはViewboxになります。ですから、次のようRowDefinitionsを変更することができます。

<Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="Auto" /> 
</Grid.RowDefinitions> 

そしてViewboxは残りの領域を埋めるようにするが、我々はStretchVerticalAlignmentHorizontalAlignmentを設定することができます。この他にもStretchプロパティをFillに設定し、コンテンツをViewboxにサイズを変更して宛先のサイズに合わせる必要があります。

完全なXAMLコードは、次のようにしてもよい。

<Grid x:Name="MainGrid" 
     Margin="0" 
     Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
     UseLayoutRounding="False"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="0" /> 
    </Grid.ColumnDefinitions> 

    <Viewbox x:Name="Zulrah" 
      Grid.Row="0" 
      AllowDrop="True" 
      Stretch="Fill"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 

      <Rectangle Grid.Column="0" 
         Width="150" 
         Height="250" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" 
         Fill="Blue" /> 
      <Rectangle Grid.Column="1" 
         Width="150" 
         Height="250" 
         HorizontalAlignment="Stretch" 
         VerticalAlignment="Stretch" 
         Fill="Red" /> 
     </Grid> 
    </Viewbox> 
    <TextBlock x:Name="TextOutput" 
       Grid.Row="1" 
       MinWidth="100" 
       MinHeight="100"> 
     Hello world! 
     <LineBreak /> 
     Life's good 
    </TextBlock> 
</Grid> 
+0

最初の行をAutoから*に変更すると、Viewboxで使われていない空き領域が多く(画像の緑色)、その領域をTextblock(画像内のGold)で撮ることができます。実際に使用する場合、Viewboxを残りの高さの一部にするだけです。ViewboxはAutoよりも多くのスペースを必要としませんが、MinHeightには従いません。 http://imgur.com/58jFwKe – ManIkWeet

+0

@ManIkWeet、最初の行の高さを 'Auto'に設定すると、' TextBlock'は実際には 'MinHeight'に従います。 **あなたがあなたの 'TextBlock'の' RenderSize'を見るために**ライブプロパティエクスプローラ**を使うならば、あなたは[this image]のような 'TextBlock'を見ることができませんが(http:// i .stack.imgur.com/6Dit1.png)。 'TextBlock'はウィンドウの高さが十分に大きくないため完全に表示されませんでした。 'Viewbox'が必要以上のスペースを必要としないようにするには、' Viewbox'で 'StretchDirection =" DownOnly "を設定することができます。 –

+0

あなたの指示で私はそれを考え出した、ありがとう。 – ManIkWeet

関連する問題