0

Silverlight アプリケーションにがDataGridあり、その列のセルが選択されたときに列全体を「強調表示」したいと考えています。

たとえば、次のグリッドが与えられた場合 (" [ ]" はセルを表します):

[     ][     ][     ]
[     ][     ][     ]
[     ][     ][     ]

このようにセルを選択すると

[     ][ selected ][     ]
[     ][          ][     ]
[     ][          ][     ]

選択したセルを含む、その列のすべてのセルを「強調表示」したいと思います(背景色を変更するだけで簡単にできます):

[     ][  selected   ][     ]
[     ][ highlighted ][     ]
[     ][ highlighted ][     ]

これを行う簡単な方法はありますか?ありがとう!

4

1 に答える 1

1

これが、正しい方向に向ける行動の始まりです

    public class DataGridHighlightBehavior : Behavior<DataGrid>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.CurrentCellChanged += AssociatedObject_CurrentCellChanged;
    }

    void AssociatedObject_CurrentCellChanged(object sender, EventArgs e)
    {
        foreach (object i in AssociatedObject.ItemsSource)
        {
            var item = AssociatedObject.CurrentColumn.GetCellContent(i);
            if (item == null)
                return;
            var parent = GetParent<DataGridCell>(item);
            if (parent != null)
                parent.Background = new SolidColorBrush(Colors.Red);
        }
    }

    public static T GetParent<T>(DependencyObject source)
            where T : DependencyObject
    {
        DependencyObject parent = VisualTreeHelper.GetParent(source);
        while (parent != null && !typeof(T).IsAssignableFrom(parent.GetType()))
        {
            parent = VisualTreeHelper.GetParent(parent);
        }
        return (T)parent;
    }
}

古いセルを通常の状態に戻すコードを追加する必要があります。私の最初の考えは、現在の視覚状態を変更して選択済みとして表示することでしたが、クラスの外からそれを行う方法を (できれば) 思い出せませんでした。

于 2010-05-17T14:20:22.183 に答える