2016-05-24 5 views
2

のサイズを変更する際、私はサイズを変更することができますWPFウィンドウを持って間違ってリサイズされた:グリッドは、メインウィンドウ

<Window x:Class="WpfTester.BadResize" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="BadResize" 
     Height="300" 
     Width="600" 
     MinWidth="600"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" MinWidth="250" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" Text="Left Panel" /> 

     <GridSplitter Grid.Column="1" 
         ResizeDirection="Columns" 
         Width="3" 
         HorizontalAlignment="Stretch" /> 

     <TextBox Grid.Column="2" 
       TextWrapping="Wrap" 
       Text="Test text test text test text test text test text test text test text test text test text text test text test text test text" /> 
    </Grid> 
</Window> 

このウィンドウには、左と右のパネルでグリッドとそれらの間のGridSplitterを持っています。 私はプログラムを実行します。 enter image description here

その後、私は、次の手順を実行します。

  1. enter image description here
  2. 移動をラップテキストは言葉もなくテキストボックスに収まるようにできるように右に右ウィンドウの境界線のサイズを変更最も左側にあるGridSpliiter(この手順は重要です) enter image description here
  3. 右端の枠の境界を左に戻し始めます。これは、[OK]を動作していれば、テキストはテキストボックス、ワードラップに適合しないいったんテキストはテキストボックス
  4. に合うよう要求されたテキストボックスが完全にリサイズされたテキストボックスには、この方法をリサイズ停止し、窓の外に行く: enter image description here

グリッドスプリッタを使用してレイアウトを配置する方法を教えてください。テキストボックスがウィンドウの外に出ないようにしてください。

答えて

0

多くの実験のみ(非ゼロマージンで)別の要素がある場合は私のためにGridSplitterで動作するラップ列幅を測定し、私はそれが良く見える同意TextBox.Width

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" MinWidth="250"/> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <TextBlock Grid.Column="0" Text="Left Panel" Name="lbl"/> 

    <GridSplitter Grid.Column="1" Width="3" HorizontalAlignment="Stretch" /> 

    <Border Grid.Column="2" Name="test" Margin="0.05"/> 

    <TextBox Grid.Column="2" 
      Width="{Binding ActualWidth, ElementName=test, Mode=OneWay}" 
      TextWrapping="Wrap" 
      Text="Test1 text2 test3 text4 test5 text6 test7 text8 test9 text0 test1 text2 test3 text4 test5 text6 test7 text8 text9 test0 text1 test2 text3 test4 text5" /> 
</Grid> 
+0

はい、動作します。しかし、このグリッドの2番目の列に8-10​​個のテキストボックスまたはテキストブロックがある場合、このようにレイアウトを構成するとFormatLine関数に時間がかかるため、サイズ変更は極端に遅くなります。同じ10個のテキストボックスをコピーして貼り付け、いくつかのグリッドにまとめて、アプリを実行し、GridSpliiterを最も左に移動して、ウィンドウのサイズを変更してみてください。 GridSpliiterを一番左に動かすと遅くなります。 WPFのバグと思われます。 –

+0

私はちょうど(UniformGridと20 + TextBoxesで)試しましたが、遅くなったとは言えません。私はUniformGridに 'Width =" {ActualWidth、ElementName = test、Mode = OneWayをバインドする " – ASh

0

グリッドスプリッターの列を作成しないでください。あなたの要素の1つと同じ列に入れてください。そのようにすれば予測が容易になり、どの列がサイズ変更されているのかを知ることができます。

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*" MinWidth="250" /> 
    <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <TextBlock Grid.Column="0" Text="Left Panel" Margin="0,0,3,0"/> 

    <GridSplitter Grid.Column="0" 
        ResizeDirection="Columns" 
        Width="3" 
        HorizontalAlignment="Right" VerticalAlignment="Stretch" /> 

    <TextBox Grid.Column="1" 
      TextWrapping="Wrap" 
      Text="Test text test text test text test text test text test text test text test text test text text test text test text test text" /> 
</Grid> 

私はそれがAUTOに幅が、もちろんあなたの自己それを試してみて、より良いフィットするものを参照してください最初の列を設定するには、より多くの意味を行いますね。

+0

にその値をバインドした後が、私が質問に記載したのと同じ方法で動作します。 –

+0

ちょうどテストされたテキストが正しくラップされています –

+0

おそらく手順2を逃したGridSpliiterを最も左に移動します。 –

関連する問題