5

テキストボックス内でテキストが変更され、特定の基準を満たす場合、テキストの色を設定する必要があります。textbox_textchangedイベントを使用してコード ビハインドからこれを実装し、 brushes.colorを目的の色に設定できます。

しかし、これを xaml wpf アプローチで実装することはできません。テキストボックスでテキストが変更されたときに、特定の基準に応じてテキストの色を設定する方法がわかりません。

例:特定のテキストボックスの場合、テキストが変更されると、入力テキストが数字かどうかを判断し、前景色を緑に、そうでない場合は赤に変更する必要があります。

ヘルプを楽しみにしています。前もって感謝します。

4

4 に答える 4

2

あなたの状況でバインディングコンバーターが許可されているかどうかはわかりません。しかし、これは、コード ビハインドでバインディング コンバーターのみを必要とするソリューションです。

これがxamlのコードです

    <Grid.Resources>
        <local:ValueConverter x:Key="ValueConverter"></local:ValueConverter>
    </Grid.Resources>
    <TextBox Text="{Binding Text,UpdateSourceTrigger=PropertyChanged}">
        <TextBox.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Text,Converter={StaticResource ValueConverter}}" Value="True">
                        <Setter Property="TextBox.Foreground" Value="Red"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

これがビューモデルと値コンバーターです

public class ViewModel : INotifyPropertyChanged
{
    private string _text;

    public string Text
    {
        get
        {
            return this._text;
        }
        set
        {
            this._text = value;
            if (null != PropertyChanged)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("Text"));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public class ValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (null != value)
        {
            if (value.ToString() == "1")
                return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

そのため、ソリューションはデータ トリガーを使用して目標を達成します。ここでバインディング コンバーターを使用する唯一の理由は、TextBox の前景を変更する値を決定する場所が必要だからです。ここで、TextBox の値が「1」の場合、TextBox の前景は赤になります。

于 2013-06-07T15:20:08.460 に答える
1

TextChangedwpf でイベントにプラグインし、XAML でこのイベントにメソッドをバインドできるはずです。次に、新しい値が基準を満たしているかどうかを確認し、それに応じて色を変更できます。

「XAMLアプローチ」が何を意味するのかよくわかりませんが、この場合、コントロールの1つで発生したイベントに動作を関連付けたいだけの場合、あなたのやり方でそれを行うのは間違っているとは思いませんすでに使用してみTextChangedました。そのため、そもそも XAML でイベントが表示されます。

于 2013-06-07T14:10:58.853 に答える
0

純粋なxaml? 、インタラクティビティ、インタラクション、トリガーを見たいと思うかもしれませんか?

MVVM の XAML で EventTrigger を使用する – コード ビハインドなし

IMMO私は、コードのプロパティ/コンバーター/拡張機能などに接続する方が良いと思います...コードの再利用を改善しますが、もちろん主観的な意見です...そして最後は常にあなた次第です。

于 2013-06-07T14:23:52.967 に答える
0

すべての入力で書き込まれているテキスト ボックス内の文字列の長さを確認します。10 を超える場合、または希望どおりの場合は、色を変更します。グレー表示されたボタンをトリガーすることもできます。

サンプル:

MyTextBlock.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

return new Size(MyTextBlock.DesiredSize.Width, MyTextBlock.DesiredSize.Height);
于 2013-06-07T14:11:06.750 に答える