4

いくつかのデータ入力 TextBoxes を含む WPF ページがあり、フォントのニーズよりもはるかに大きく見えます。テキストボックスの高さを決定するものは何ですか? それらをつぶす方法はありますか?

テキストボックスは、表示されるフォントサイズに応じて大きくなったり小さくなったりします(そのため、できれば高さプロパティを直接設定したくありません.

これが私が意味することの例です...

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <Style x:Key="LabelStyle" TargetType="Label">
      <Setter Property="HorizontalAlignment" Value="Right"/>
      <Setter Property="VerticalAlignment" Value="Center"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>

    <Style x:Key="TextBoxStyle" TargetType="TextBox">
      <Setter Property="HorizontalAlignment" Value="Left"/>
      <Setter Property="VerticalAlignment" Value="Center"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
    </Style>

  </Page.Resources>
  <StackPanel>
    <WrapPanel>
      <Label Style="{StaticResource LabelStyle}" Content="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
      <TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding ActualHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    </WrapPanel>
    <WrapPanel>
      <Label Style="{StaticResource LabelStyle}" Content="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
      <TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding ActualHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
    </WrapPanel>
  </StackPanel>
</Page>

サイズを見ると、ラベルがテキスト ボックスよりも少し大きいことがわかります。テキストボックスの VerticalAlignment を Top に変更すると、同じサイズになります。暫定的な措置として、ラベルの余白を -2 に設定しました。

4

1 に答える 1

14

私の推測では、あなたTextBoxのコンテナが大きすぎる原因になっていると思います。

Kaxamlで次の XAML を試してください。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Grid VerticalAlignment="Center" HorizontalAlignment="Center">  
    <TextBox Text="Sample text" FontSize="2" />
  </Grid>

</Page>

これは、ページの中央に非常に小さなテキスト ボックスとして表示されます。コンテナから andを削除するVerticalAlignment="Center"HorizontalAlignment="Center"、テキスト ボックスが非常に大きくなります。

および のデフォルトの水平方向および垂直方向の配置は ですGridTextBoxこれはStretch基本的に、要素が気にせず、指定されたものを取ることを意味します。そのため、レイアウト エンジンは、TextBoxどのくらいの大きさにするべきかを に尋ねますが、答えが得られないため、レイアウトは に尋ねますGrid。も気にGridしないので、最後に固定サイズのPage/Windowを要求し、このサイズがビジュアル ツリーに伝播されます (途中でマージンとパディングが考慮されます)。最終的な結果は、TextBoxが領域全体を埋めることです。

この点を証明するために、配置属性を から 自体に移動しGridますTextBox。視覚的に違いはわかりませんが、Grid の背景色を設定すれば違いがわかります。

<Grid Background="Red">
  <TextBox VerticalAlignment="Center" HorizontalAlignment="Center"
           Text="Sample text" FontSize="2" />
</Grid>

テキスト ボックスの境界線をテキストのすぐ上に詰め込みたい場合はPadding="0"、テキスト ボックス自体に設定することもできます。

WPF レイアウト システムの詳細については、この記事を参照してください。

于 2009-02-18T09:55:43.273 に答える