Code:
public class ListViewSimpleAdorner : Adorner
{
public SolidColorBrush backgroundBrush { get; set; }
public SolidColorBrush penBrush { get; set; }
public Pen drawingPen { get; set; }
public Rect HighlightArea
{
get { return (Rect)GetValue(HighlightAreaProperty); }
set { SetValue(HighlightAreaProperty, value); }
}
public static readonly DependencyProperty HighlightAreaProperty =
DependencyProperty.Register("HighlightArea", typeof(Rect),
typeof(ListViewSimpleAdorner), new FrameworkPropertyMetadata(new Rect(),
FrameworkPropertyMetadataOptions.AffectsRender));
public ListViewSimpleAdorner(UIElement element)
: base (element)
{
backgroundBrush = new SolidColorBrush(Colors.LightBlue);
backgroundBrush.Opacity = 0.5;
penBrush = new SolidColorBrush(Colors.Black);
penBrush.Opacity = 0.5;
drawingPen = new Pen(penBrush, 1);
this.IsHitTestVisible = false;
}
protected override void OnRender(DrawingContext dc)
{
dc.DrawRectangle(backgroundBrush, drawingPen, HighlightArea);
}
}
// in der main class
ListViewSimpleAdorner myAdorner { get; set; }
Point? myDragStartPoint { get; set; }
// im main window's constructor:
this.SourceInitialized += delegate
{
AdornerLayer.GetAdornerLayer(myListView).Add(myAdorner =
new ListViewSimpleAdorner(myListView));
myListView.PreviewMouseDown += (o, e) =>
{
if (e.ChangedButton == MouseButton.Left)
{
myDragStartPoint = e.GetPosition(myListView);
myListView.SelectedItems.Clear();
}
};
myListView.MouseMove += (o, e) =>
{
if (myDragStartPoint.HasValue)
{
Rect r = new Rect(myDragStartPoint.Value,
e.GetPosition(myListView) - myDragStartPoint.Value);
myAdorner.HighlightArea = r;
var items = myListView.GetItemAt<CardItem>(r);
if (items.Count > 0)
{
myListView.SelectedItems.Clear();
foreach (var i in items)
myListView.SelectedItems.Add(i);
}
else
myListView.SelectedItems.Clear();
}
};
myListView.MouseUp += (o, e) =>
{
if (e.ChangedButton == MouseButton.Left)
{
myDragStartPoint = null;
myAdorner.HighlightArea = new Rect();
}
};
myListView.MouseLeave += (o, e) =>
{
myDragStartPoint = null;
myAdorner.HighlightArea = new Rect();
};