5

ツールボックスでWPFコンポーネントを調べていますが、2005/2008に存在するエラープロバイダーが見つかりません。

削除されていますか?

4

3 に答える 3

10

ErrorProviderはWinformsコントロールです。WPFには同等のものはありません。ただし、Winフォームプロジェクトを作成すると、VisualStudio2008で見つけることができます。

WPFでのエラー検証に関するこの記事を参照することをお勧めします。検証を処理する方法について、いくつかの有用な提案とアイデアがあります。

于 2009-11-09T14:06:55.527 に答える
3

.NET 3.5は、IDataErrorInfoのWPFサポートを追加しました:.NET3.5でのデータ検証

于 2009-11-09T14:07:00.230 に答える
0

最初はそのような古い議論にコメントしてくれてすみませんが、まったく同じ質問があったのでこれは役立つかもしれません、そしてサイモンのリンクは私が「何かから始める」のを助けました

Simon P.Stevensチュートリアルをテストすることはできましたが、正直なところ、それほど好きではありませんでした。

  • responseTemplateを使用すると、エラーを表示するときの応答が遅くなります。
  • これは、ルールが同じクラスで常に同じである場合にのみ機能します(私の場合、いくつかの数量があり、負の場合もあれば、そうでない場合もあります)。
  • 国際化されたアプリケーションの場合(私の場合)、外部ライブラリは翻訳されているリソースにアクセスできないため、適切なメッセージを設定できません。

MVVMの使用は、あらゆる状況を管理するのに非常に適していると思います。

条件に関して、BorderBrushとToolTipを使用してTextBoxを設定し、ToolTipと色の境界線を非表示/表示します。

XAML:

<TextBox x:Name="tbName" Grid.Column="1" Grid.Row="0" Margin="3" LostFocus="tbName_LostFocus" BorderBrush="{Binding BordertbName}"
                 Text="{Binding MonRepere.Nom}" ToolTipService.ToolTip="{Binding ErrorName}" ToolTipService.IsEnabled="{Binding ToolTipNameEnable}"/>

コードビハインド(LostFocus = WindowsFormに慣れている人に任せる):

private void tbName_LostFocus(object sender, RoutedEventArgs e)
    {
        if(tbName.Text=="")
        {
            this.mv.ErrorName = Properties.Resources.ErrorEmpty;

        }
        else
        {
            mv.ErrorName = "";
        }
    }

次にViewModel:

private string errorName;
            public string ErrorName
            {
                get { return errorName; }
                set
                {
                    errorName = value;
                    if (value == "")
                    {
                        ToolTipNameEnable = false;
                        BordertbName = Brushes.Gray;
                    }
                    else
                    {
                        ToolTipNameEnable = true;
                        BordertbName = Brushes.Red;
                    }
                    this.NotifyPropertyChanged("ErrorName");
                }
            }
            private Brush bordertbName;
            public Brush BordertbName
            {
                get { return bordertbName; }
                set
                {
                    bordertbName = value;
                    this.NotifyPropertyChanged("BordertbName");
                }
            }
            private bool toolTipNameEnable;
            public bool ToolTipNameEnable
            {
                get { return toolTipNameEnable; }
                set
                {
                    toolTipNameEnable = value;
                    this.NotifyPropertyChanged("ToolTipNameEnable");
                }
            }

ルールが状況に関して特定である場合に非常に役立ちます。

于 2018-03-08T14:43:36.950 に答える