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

現在のフォントでテキストの幅を決定し、そのサイズを幅に設定する必要があると思いますTextBoxFormattedTextクラスを使用してテキスト幅を測定できます( FormattedText Methodsを参照)。

于 2013-01-20T23:40:43.757 に答える
0

XAML でこれを行う際の問題は、 を にバインドするときにWidthActualWidthの初期値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 の場合にのみ を返します。

コンバーターは実際には 2 回呼び出され、2 回目は正しい値で呼び出され、それがテキスト ボックスのWidthプロパティに設定されます。

于 2013-01-20T23:50:35.780 に答える