【发布时间】:2016-12-27 22:18:11
【问题描述】:
在 UWP 应用中,是否可以使用某些文本的大小和字体来计算 TextBox 需要多大才能容纳该文本而不滚动?
这对于设计整体布局很有用——根据文本框的大小,可能会切换到不同的配置。
我将在代码中而不是在 xaml 中完成所有这些工作,因为我的应用程序是跨平台的,并且它的图形布局大脑位于与平台无关的部分。
如果不可能知道尺寸,那么即使知道它的任何一个尺寸都很好,如果可能的话。
【问题讨论】:
在 UWP 应用中,是否可以使用某些文本的大小和字体来计算 TextBox 需要多大才能容纳该文本而不滚动?
这对于设计整体布局很有用——根据文本框的大小,可能会切换到不同的配置。
我将在代码中而不是在 xaml 中完成所有这些工作,因为我的应用程序是跨平台的,并且它的图形布局大脑位于与平台无关的部分。
如果不可能知道尺寸,那么即使知道它的任何一个尺寸都很好,如果可能的话。
【问题讨论】:
试试这个:
public sealed partial class MainPage
{
private TextBox _textBox;
private TextBlock _textBlock;
public MainPage()
{
InitializeComponent();
Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
_textBlock = new TextBlock
{
Margin = new Thickness(10000, 10000, 0, 0),
};
MainGrid.Children.Add(_textBlock);
_textBox = new TextBox
{
Width = _textBlock.ActualWidth + 64, //is for clear button space
Height = _textBlock.ActualHeight,
};
_textBox.TextChanged += _textBox_TextChanged;
MainGrid.Children.Add(_textBox);
}
private void _textBox_TextChanged(object sender, TextChangedEventArgs e)
{
_textBlock.Text = _textBox.Text;
_textBox.Width = _textBlock.ActualWidth + 64;
_textBox.Height = _textBlock.ActualHeight;
}
}
这不是完美的解决方案,但可能适合。
您只需在屏幕外的某个地方创建 textBlock 并遵循其大小。
XAML 只有 1 个网格 x:Name="MainGrid"
【讨论】: