haa*_*gel 11 wpf xaml textbox autosize
我在应用程序中遇到TextBox问题...
窗口有一个带两列的网格.左列包含一个具有恒定宽度但具有适应高度的控件.右列包含一个TextBox,它占用Grid中的所有剩余空间(从而占用Window).
Grid具有最小的宽度和高度,并包含在ScrollViewer中.如果用户将窗口的大小调整为小于Grid的最小widht/height,则会显示滚动条.
这正是我想要的.但是,当用户开始键入文本时会出现问题.如果文本要长到适合TextBox中的一行,我希望文本换行.因此我在TextBox上设置了TextWrapping ="Wrap".但由于TextBox具有自动宽度并且包含在ScrollViewer中(实际上是包裹的整个Grid),因此TextBox只是向右扩展.
如果窗口展开,我确实希望TextBox扩展,但我不希望TextBox按文本扩展.而是文本应该包装在可用的TextBox中.如果文本不适合TextBox高度,则应在TextBox中显示滚动条.
有没有办法实现这个目标?
下面是一些显示我的问题的代码.
<Window x:Class="AdaptingTextBoxes.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="400" Background="DarkCyan">
<Grid Margin="10" Name="LayoutRoot">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid MinWidth="300" MinHeight="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="0,0,10,0" Content="Button" Width="100" />
<TextBox Grid.Column="1" AcceptsReturn="True" TextWrapping="Wrap" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" />
</Grid>
</ScrollViewer>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
Leo*_*rke 15
你可以使用一个不可见的边框(它的hacky但它的工作原理 - 我倾向于整理动态文本框大小):
<Border BorderThickness="0" x:Name="border" Grid.Column="1" Margin="0.5" />
<TextBox Grid.Column="1" AcceptsReturn="True" TextWrapping="Wrap" Width="{Binding ActualWidth, ElementName=border}" Height="{Binding ActualHeight, ElementName=border}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5765 次 |
| 最近记录: |