C# 文本框在滚动视图内调整大小(带水平滚动)
我的C# 文本框在滚动视图内调整大小(带水平滚动),c#,user-interface,uwp,uwp-xaml,C#,User Interface,Uwp,Uwp Xaml,我的文本框控件有问题。 请注意ScrollViewer的 这是我的xaml: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ScrollViewer HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Auto"> <TextBox HorizontalAlignment="St
文本框
控件有问题。
请注意ScrollViewer的
这是我的xaml:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ScrollViewer HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Auto">
<TextBox HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Margin="20"
Text = "A short text">
</TextBox>
</ScrollViewer>
</Grid>
其结果是:
它看起来像预期的,如果调整窗口大小,它会很好地扩展/收缩。
到目前为止还不错,但是如果文本稍微长一点会发生什么呢
发生这种情况:
TextBox
现在会增长,以适应其中包含的文本
a) 因为有一个允许水平滚动和
b) 结果是一个非常丑陋的UI(因为右边距不可见,但滚动条可见,等等)
有人知道我如何在第一个屏幕截图中获得外观,即使文本较长(同时保留ScrollViewer)
我想为文本框设置一个最大宽度,但它阻止了文本框随着窗口的增长而增长,这是不可接受的。尝试在scrollviewer上设置Padding属性,而不是边距,试试这个
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">">
<ScrollViewer HorizontalScrollBarVisibility="Auto" Padding="20,0">
<TextBox HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Margin="20"
Text = "A short text">
</TextBox>
</ScrollViewer>
</Grid>
“>
在调整窗口大小时更改文本框的MaxWidth
属性可以解决问题。不过,我认为这不是一种干净的方法
int margin = 40; // Set your margin
public MainPage()
{
this.InitializeComponent();
InputTextBox.MaxWidth = Window.Current.Bounds.Width - margin;
Window.Current.SizeChanged += Current_SizeChanged;
}
private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
var size = e.Size;
InputTextBox.MaxWidth = size.Width - margin;
}
我想你可能会把ScrollViewer
的宽度
或实际宽度
与它的滚动宽度
混淆,如果你不限制文本框的宽度
,滚动宽度
将随着文本框的宽度而增长。限制文本框的宽度
不会解决你的问题问题
…右边距不可见,但有一个滚动条
我想你需要的是这样的东西:
xaml代码:
<ScrollViewer Margin="20" BorderBrush="Blue" BorderThickness="2"
HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Hidden" VerticalScrollMode="Disabled" Height="45">
<TextBox x:Name="tb" HorizontalAlignment="Stretch" VerticalAlignment="Center"
BorderThickness="0"/>
</ScrollViewer>
您可以自定义ScrollViewer
,使其行为类似于文本框
,例如,当获得焦点时,将显示边框
,或其他内容。如果您不想滚动内容,使用ScrollViewer
的原因是什么?请尝试将TextBox.Width绑定到ScrollViewer.ActualWidth他的主意不错