加载时自动调整文本框宽度 ->然后修复大小
本文关键字:然后 调整 文本 加载 | 更新日期: 2023-09-27 17:54:53
这是使用 C# 向 wpf 提出的一种新手问题。
我有一个TextBox
,用户可以在其中输入时间。由于字体大小可能不同,我希望TextBox
在加载表单时自动调整为其初始值"00:00:00"。
之后,我不想调整大小,因为如果TextBox
根据用户输入调整大小,看起来很奇怪。
目前我正在 xaml 文件中定义:
<TextBox Text="00:00:00" Name="myTextBox" />
这样,文本框将自动调整为当前内容的大小。
为了防止它在表单可见后调整大小,我使用:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
myTextBox.Width = myTextBox.ActualWidth;
}
这给了我想要的结果。
但是,仅通过设置 xaml 属性是否可以相同?
我认为您需要使用当前字体确定文本的宽度,并将该大小设置为TextBox
宽度。可以使用 FormattedText
类测量文本宽度(请参见格式化文本方法(。
在 XAML 中执行此操作的问题是,当将Width
绑定到ActualWidth
时,ActualWidth
的初始值通常为 0。因此,它会将您的宽度设置为 0。
这可以通过使用Converter
轻松解决。
因此,请像这样创建您的TextBox
:
<TextBox Text="00:00:00" Name="myTextBox" Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}, Converter={StaticResource widthConverter}}" />
现在你的转换器应该是这样的:
class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double actualWidth;
if (Double.TryParse(value.ToString(), out actualWidth))
{
if (actualWidth> 0)
{
return actualWidth;
}
}
return null;
}
}
换句话说,仅当ActualWidth
> 0 时
转换器实际上将被调用两次,第二次使用正确的值,这就是将在文本框的 Width
属性中设置的值。