2012-01-04 1 views
6

LOBフォームのラベルとテキストボックスのフォントサイズを、ウィンドウのサイズ変更または解像度の変更で拡大および縮小したい。これを達成するために、ラベルとテキストボックスをビューボックス内に配置しました。テキストボックスが伸びて表示ボックスを埋めない

ラベルとカスタムラジオボタンは予期したとおりに動作しますが、テキストボックスはビューボックスを埋めるために横方向に伸びません(担当者のおかげで画像は投稿できません)。テキストボックスは、入力すると横に表示されます。ここで

は、私が働いているコードの例です:私は、グリッド、のStackPanelとdockpanelを配置しようとした

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.186*"/> 
      <ColumnDefinition Width="0.814*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="0.127*"/> 
      <RowDefinition Height="0.873*"/> 
     </Grid.RowDefinitions> 
     <Viewbox Margin="0,0,0.917,0"> 
      <Label Content="First name:"/> 
     </Viewbox> 
     <Viewbox Grid.Column="1"> 
      <TextBox TextWrapping="Wrap"/> 
     </Viewbox> 
    </Grid> 

ビューボックス内(LastChildFill =「True」を持つ)、その後、テキストボックスを配置しますこれらのレイアウトコントロール内では動作しませんでした。テキストボックスを親ビューボックスを水平方向に埋めるようにするにはどうしたらいいですか?

この問題はWPF TextBox won't fill in StackPanelと似ていますが、この問題はビューパネルではなくスタックパネルで発生します。

+0

まず、xamlを正しく作成することです。グリッド項目ごとに列/行を指定しないでください。 – GameAlchemist

+1

@VincentPielそれは実際には関係ありません。列と行の既定値は0です。 – mydogisbox

答えて

10

あなたが望むものは簡単にはできないと思います。 ViewBoxは、レイアウト中の測定パスで無限のスペースがあることを子に通知します。その後、ディスプレイはビューボックスに収まります。無限の空間を持つように言われたテキストボックスは、明らかに伸びることができません。 私には2つのソリューションがありますが、これはあなたが望むものではないと思いますが、とにかく役に立つかもしれません。

最初:

<Viewbox Grid.Column="1" Grid.Row="0" Stretch="Uniform" > 
    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=ActualWidth}"> 
     <TextBox TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </Grid> 
</Viewbox> 

これはあなたがInfactはテキストボックスストレッチが、ビューボックスから期待される動作を無効にします。どうして?私たちは、ViewBoxにアスペクト比を維持し、テキストボックスのサイズを保持するビューボックスの幅全体を満たすようにテキストボックスを設定するように指示しました。

秒:

は、そのビューボックスのscaletransformで修飾されたラベルから採取されたグリッドの高さを追加することであろう。

これは私が試したことはありませんが、バリューコンバータを必要とします。

結論:ビューボックスのレイアウトの仕方により、あなたが望むものを達成するための簡単な方法はありません。水平方向に伸ばしたい場合は、最初の解決方法がうまくいきます。私の推測では、あなた自身でそれをやらなければならないということです。

+1

AcutalWidthまたはActualHeightへのバインドに関する警告:「ActualHeightは計算値なので、レイアウトシステム。レイアウトシステムは、子要素、親要素による制約などの必要な測定スペースを計算している可能性があります。 "これにより、ActualHeightまたはActualWidthに対するバインディングがresizeごとに複数回起動される可能性があります。 – mydogisbox

+0

+1もちろん、あなたは正しいと指摘する価値がありますが、この場合、私はより良い解決策を知りません。 – dowhilefor

+0

ハハ!私は実際の幅なしでそれをしました! – mydogisbox

1

何をしたいが機能しない/それその後、偽のは容易ではない場合:基本的に何が起こるかは別TextBoxViewboxの背後にあるとTextBox後ろがフォーカスを取得したときに、それはにフォーカスを切り替えている

<TextBox GotFocus="TextBox_GotFocus" HorizontalAlignment="Stretch" BorderThickness="0" Grid.Column="1"/> 
    <Viewbox HorizontalAlignment="Left" Stretch="Uniform" Grid.Column="1"> 
     <TextBox x:Name="NameTextBox" Width="50" TextWrapping="Wrap" Text="Text" BorderThickness="0"/> 
    </Viewbox> 

    private void TextBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     NameTextBox.Focus(); 
     NameTextBox.SelectionStart = NameTextBox.Text.Length; 
    } 

ViewboxTextBoxこれにより、相対的なサイズのグリッド設定があるため、奇妙なサイズ変更が発生します。必要な効果が得られるまで、グリッドの列/幅のサイズで遊ぶ必要があります。

関連する問題