WPF - 如何阻止TextBox自动调整?

时间:2010-12-16 21:42:53

标签: wpf textbox grid autosize

我的可视化树中有一个文本框,如下所示..

  • 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)时,列表框中的所有项目都会扩展其文本框/网格宽度,以便在使用底部显示的滚动条时可以看到整个字符串... < / p>

我想做的是使框架/网格仅在用户拉伸窗口时调整大小..不是在输入长文本时(它可能只是环绕......)

有谁知道如何获得这些功能?

5 个答案:

答案 0 :(得分:9)

以下作品:

<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"

答案 1 :(得分:5)

Something 需要包含文本框可用的水平宽度,在这种情况下,您希望阻止ListBox无限期地水平增长:

<ListBox HorizontalScrollBarVisibility="Disabled"

答案 2 :(得分:4)

不幸的是,常规TextBox不允许autoresize适合父级,但是当文本不适合时不会自动调整大小。

要解决此问题,您可以使用报告所需(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>

答案 3 :(得分:1)

两个改变代码:
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>

答案 4 :(得分: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>