1

いくつかの階層データを表示するために XamDataGrid (Infragistics-control) を使用しています。最大 10 のレベルを持つことができるオブジェクトと、各レベルに特定の背景色を与えることができる必要があります。私は AssigningFieldLayoutToItem イベントを使用してアイテムの「レベル」を取得していますが、ここでも背景/スタイルを割り当てるのが最善だと思います。

DataRecordCellArea スタイルと CellValuePresenter スタイルを指定しようとしましたが、これらのいずれも FieldLayout で動作させることができません。

もう 1 つの解決策は、レベルごとに FieldLayout を記述することですが、これでは不要な XAML コードが大量に作成されます。

私が何をすべきかについて何か提案はありますか?

4

1 に答える 1

1

レベルごとに異なるFieldLayoutがある場合は、コンバーターを使用してDataRecordPresenterをターゲットとする単一のスタイルを使用して背景を設定できます。

XAML:

<local:BackgroundConverter x:Key="BackgroundConverter"/>
<Style TargetType="{x:Type igDP:DataRecordPresenter}">
    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=FieldLayout.Key, Converter={StaticResource BackgroundConverter}}"/>
</Style>

コンバータ:

    public class BackgroundConverter:IValueConverter
{
    public BackgroundConverter()
    {
        this.Brushes = new Dictionary<string, Brush>();
    }

    public Dictionary<string, Brush> Brushes {get;set;}
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is string)
        {
            string key = value.ToString();
            if (this.Brushes.ContainsKey(key))
                return this.Brushes[value.ToString()];
        }                
        return Binding.DoNothing;
    }

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

以下は、Key1とKey2のフィールドに使用する色を設定します。

BackgroundConverter backgroundConverter = this.Resources["BackgroundConverter"] as BackgroundConverter;
backgroundConverter.Brushes.Add("Key1", Brushes.Green);
backgroundConverter.Brushes.Add("Key2", Brushes.Yellow);

複数のフィールドに同じFieldLayoutを再利用する場合は、InitializeRecordイベントを使用して、次のようにデータレコードのタグにバインドするスタイルを変更できます。

XAML:

    <Style TargetType="{x:Type igDP:DataRecordPresenter}">
    <Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=Record.Tag}"/>
</Style>

C#:

    void XamDataGrid1_InitializeRecord(object sender, Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e)
{
    if (!e.ReInitialize)
    {
        // Set the tag to the desired brush.
        e.Record.Tag = Brushes.Blue;
    }
}

使用するブラシを決定するための条件付きロジックを追加しなかったことに注意してください。それでも、さまざまなレベルでさまざまな背景を使用するには、これを実行する必要があります。

于 2012-04-08T17:53:54.173 に答える