102

これは簡単なはずですが、私は困惑しています。WPF では、親の幅まで伸びる TextBox が必要ですが、最大幅までしか伸びません。問題は、親内で正当化されたままにしたいということです。ストレッチするには、Horizo​​ntalAlignment="Stretch" を使用する必要がありますが、結果は中央に配置されます。Horizo​​ntalContentAlignment を試してみましたが、何もしないようです。

この青いテキスト ボックスをウィンドウのサイズに合わせて大きくし、最大幅を 200 ピクセルにし、左揃えにするにはどうすればよいですか?

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>  
    <TextBox Background="Azure" Text="Hello" HorizontalAlignment="Stretch" MaxWidth="200" />
  </StackPanel>
</Page>

トリックは何ですか?

4

8 に答える 8

93

HorizontalAlignmentLeft に設定し、自分を設定してから、親要素の にMaxWidthバインドできます。WidthActualWidth

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel Name="Container">   
    <TextBox Background="Azure" 
    Width="{Binding ElementName=Container,Path=ActualWidth}"
    Text="Hello" HorizontalAlignment="Left" MaxWidth="200" />
  </StackPanel>
</Page>
于 2008-11-11T09:25:52.043 に答える
53
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" MaxWidth="200"/>
    </Grid.ColumnDefinitions>

    <TextBox Background="Azure" Text="Hello" />
</Grid>
于 2008-11-11T09:13:42.867 に答える
8

与えられた両方の回答は、私が述べた問題に対して機能しました-ありがとう!

私の実際のアプリケーションでは、ScrollViewer 内のパネルを制約しようとしていましたが、何らかの理由で Kent のメソッドはそれをうまく処理できませんでした。基本的に、コントロールは MaxWidth 設定を超えて拡大する可能性があり、私の意図を無効にしました。

Nir の手法はうまく機能し、ScrollViewer に問題はありませんでしたが、注意すべき点が 1 つあります。TextBox の左右の余白が 0 に設定されていることを確認する必要があります。そうしないと、邪魔になります。また、垂直スクロールバーが表示されたときの問題を回避するために、ActualWidth の代わりに ViewportWidth を使用するようにバインディングを変更しました。

于 2008-11-11T11:26:27.887 に答える
7

これを DataTemplate の Width に使用できます。

Width="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}"

DataTemplate ルートに Margin="0" があることを確認してください (パネルをルートとして使用し、Margin をそのルートの子に設定できます)。

于 2010-08-26T08:25:00.590 に答える