对于使用C#的wpf来说,这是一个新手问题。
我有TextBox
,用户可以输入时间。由于字体大小可能不同,我希望TextBox
在表单加载时自动调整为其初始值“00:00:00”。
之后,我不想调整大小,因为如果TextBox
调整用户输入大小,它看起来很奇怪。
目前我在xaml文件中定义:
<TextBox Text="00:00:00" Name="myTextBox" />
这样,TextBox将自动调整为当前内容。
为了防止在表单可见后调整大小,我使用:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
myTextBox.Width = myTextBox.ActualWidth;
}
这给了我想要的结果。
但是,仅通过设置xaml属性也是一样的吗?
答案 0 :(得分:0)
我认为您需要使用当前字体确定文本的宽度,并将该大小设置为TextBox
宽度。您可以使用FormattedText
类测量文本宽度(请参阅FormattedText Methods)。
答案 1 :(得分:0)
在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
如果是&gt; 0
转换器实际上会被调用两次,第二次使用正确的值,这将在文本框的Width
属性中设置。