0

这是使用 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 属性是否也有可能?

4

2 回答 2

0

我认为您需要使用当前字体确定文本的宽度,并将该大小设置为TextBox宽度。FormattedText您可以使用该类测量文本宽度(请参阅FormattedText 方法)。

于 2013-01-20T23:40:43.757 回答
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;
    }
}

换句话说,只返回ActualWidthif > 0。

转换器实际上将被调用两次,第二次使用正确的值,这将在文本框的Width属性中设置。

于 2013-01-20T23:50:35.780 回答