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 回答
2

两个更改代码:
1- 使用您的 grid.column 和 grid.row 大小添加边框标签,您是 neads。
2- 文本框的宽度和高度设置为它。
样本:

 <Border x:Name="b" Margin="5"/>


  <TextBox Height="Auto" 
             Text="{Binding Path=LyricsForDisplay}" 
             MinHeight="50" 
             Width="{Binding ActualWidth, ElementName=b}" 
             Height="{Binding ActualHeight, ElementName=b}" 
             Visibility="Visible" 
             VerticalScrollBarVisibility="Auto" 
             IsReadOnly="True" 
             AllowDrop="False" 
             TextWrapping="Wrap">
    </TextBox>
于 2016-05-20T15:04:33.480 回答
0

尝试在您的文本框中设置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 回答