0

特定のグリッドのバス電圧を確認するプログラムを開発しています。これらの電圧は DataGrid に表示されます。ユーザーは、境界を設定して、電圧がエラーとしてマークされている制限の外側でバス電圧を「正常」と見なすことができます。

Example:
Upper limit: 1.05
Lower limit: 0.95

  1     2     3
A 0.93  0.96  1.02
B 1.03  0.91  1.08
C 0.95  1.00  0.98

Therefore the erroneous will be: A1, B2 and B3

エラーセルを赤く塗りつぶしたいと思います。

XAML を通じて問題を解決する多くの回答を見てきました。私は WPF を初めて使用しますが、すべての XAML ソリューションは静的であり、設計時に定義されているようです。ユーザーが条件を変更できるため、実行時に色を変更する必要があります。

基本的に私が欲しいのは、動的パラメーターに基づいて色を変更することです。テーブルには、角度や電流など、電圧以外の他のパラメーターが含まれているため、すべての列ではありません。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

ValueConverter または MultiValueConverter が必要です。以下は、 「動作するはず」の簡単な例ですが、記憶から書いたので、少し間違っているかもしれませんが、アイデアが得られるはずです。

[ValueConversion(typeof(decimal), typeof(Brush))]
public class BusVoltagesColorConverter : MarkupExtension, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || !(value is decimal))
        {
            return DependencyProperty.UnsetValue;
        }
        var d = (decimal) value;
        decimal lowerLimit = 0.95m; //TODO get your value from your user settings here
        decimal upperLimit = 1.05m;
        if (d < lowerLimit || d > upperLimit)
        {
            return Brushes.Red;
        }
        return Brushes.Black;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return new BusVoltagesColorConverter();
    }
}

次に、WPF ページで、それをリソースとして追加する必要があります。その後、フォアグラウンドまたはバックグラウンドのデータ バインディングにコンバーターをアタッチするだけです。

于 2013-06-05T15:03:40.520 に答える