12

次のように、ビジュアルツリーにテキストボックスがあります..

  • Window
    • Grid
      • ListBox
        • ItemTemplate
          • DataTemplate
            • Grid
              • Grid
                • Textbox...
テキストボックスは次のように定義されています..

<TextBox Height="Auto" 
         Text="{Binding Path=LyricsForDisplay}" 
         MinHeight="50" 
         MaxHeight="400"  
         Visibility="Visible" 
         VerticalScrollBarVisibility="Auto" 
         IsReadOnly="True" 
         AllowDrop="False" 
         TextWrapping="WrapWithOverflow">
</TextBox>

バインドされた変数 (LyricsForDisplay) に長いテキストが追加されると、リストボックス内のすべての項目のテキストボックス/グリッド幅が拡張され、表示される下部のスクロールバーを使用すると文字列全体が表示されるようになります...

私がしたいのは、ユーザーがウィンドウを拡大した場合にのみボックス/グリッドのサイズが変更されるようにすることです..長いテキストが入力された場合ではありません(ラップアラウンドする可能性があります..)

機能を取得する方法を知っている人はいますか?

4

5 に答える 5

10

以下の作品:

<ListBox Name="ListBox1"
            ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid>
                    <TextBox TextWrapping="Wrap"></TextBox>
                </Grid>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

ScrollViewer.HorizontalScrollBarVisibility="Disabled"との使用に注意してくださいTextWrapping="Wrap"

于 2010-12-17T06:34:02.570 に答える
8

残念ながら、通常の TextBox では、親に合わせて自動サイズ変更することはできませんが、テキストが収まらない場合は自動サイズ変更できません。

この問題を解決するには、目的の (0, 0) サイズを報告するカスタム TextBox を使用できます。これは醜いハックですが、機能します。

.xaml.cs ファイルで:

public class TextBoxThatDoesntResizeWithText : TextBox
{
    protected override Size MeasureOverride(Size constraint)
    {
        return new Size(0, 0);
    }
}

次に、.xaml ファイルで次のようにします。

<Window x:Class="YourNamespace.YourWindow"
    ...
    xmlns:local="clr-namespace:YourNamespace">
        ...
        <local:TextBoxThatDoesntResizeWithText Height="Auto" 
                                               Text="{Binding Path=LyricsForDisplay}" 
                                               MinHeight="50" 
                                               MaxHeight="400"  
                                               Visibility="Visible" 
                                               VerticalScrollBarVisibility="Auto" 
                                               IsReadOnly="True" 
                                               AllowDrop="False" 
                                               TextWrapping="WrapWithOverflow">
        </local:TextBoxThatDoesntResizeWithText>
        ...
</Window>
于 2017-02-21T14:41:46.097 に答える
4

TextBoxesで使用できる水平幅を制限する必要があります。この場合、ListBox水平方向に無期限に拡大しないようにする必要があります。

<ListBox HorizontalScrollBarVisibility="Disabled"
于 2010-12-16T22:06:01.450 に答える
0

Textbox でMaxWidthプロパティを設定してみてください

<TextBox Height="Auto" Text="{Binding Path=LyricsForDisplay}" MinHeight="50" MaxHeight="400"  Visibility="Visible" VerticalScrollBarVisibility="Auto" MaxWidth="100" IsReadOnly="True" AllowDrop="False" TextWrapping="WrapWithOverflow">                            </TextBox>
于 2010-12-17T06:17:31.367 に答える