zoukankan      html  css  js  c++  java
  • [WPF][ListBox]鼠标拖拽多选,(Shift Key、Ctrl Key多选有效)(转)

    <ListBox Name="listBox" SelectionMode="Extended">

        <ListBox.Resources>

            <Style TargetType="{x:Type ListBoxItem}">

                <EventSetter Event="ListBoxItem.PreviewMouseLeftButtonDown" Handler="lbItem_PreviewMouseLeftButtonDown"/>

                <EventSetter Event="ListBoxItem.PreviewMouseUp" Handler="lbItem_PreviewMouseUp"/>

                <EventSetter Event="ListBoxItem.PreviewMouseMove" Handler="lbItem_PreviewMouseMove"/>

            </Style>

        </ListBox.Resources>

        <x:Type TypeName="DependencyObject"/>

        <x:Type TypeName="Visual"/>

        <x:Type TypeName="UIElement"/>

        <x:Type TypeName="FrameworkElement"/>

        <x:Type TypeName="Control"/>

    </ListBox>

    private bool inMouseSelectionMode = false;

    private List<ListBoxItem> selectedItems = new List<ListBoxItem>(); 

    private void lbItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)

    {

        // MouseDown时清空已选Item

        // 同时开始"inMouseSelectionMode"

        foreach (var item in selectedItems)

        {

            item.ClearValue(ListBoxItem.BackgroundProperty);

            item.ClearValue(TextElement.ForegroundProperty);

        }

        selectedItems.Clear();

        inMouseSelectionMode = true;

    }

    private void lbItem_PreviewMouseUp(object sender, MouseButtonEventArgs e)

    {

        // MouseUp时停止"inMouseSelectionMode"

        ListBoxItem mouseUpItem = sender as ListBoxItem;

        inMouseSelectionMode = false;



    private void lbItem_PreviewMouseMove(object sender, MouseEventArgs e)

    {

        ListBoxItem mouseOverItem = sender as ListBoxItem;

        if (mouseOverItem != null && inMouseSelectionMode && e.LeftButton == MouseButtonState.Pressed)

        {

            // Mouse所在的Item设置高亮

            mouseOverItem.Background = SystemColors.HighlightBrush;

            mouseOverItem.SetValue(TextElement.ForegroundProperty, SystemColors.HighlightTextBrush);

            if (!selectedItems.Contains(mouseOverItem)) { selectedItems.Add(mouseOverItem); }

        }

    }

      本文来自ny_dsc的博客,原文地址:http://hi.baidu.com/ny_dsc/blog/item/2bc69a31fdfb3186a8018e9a.html

  • 相关阅读:
    C++——"%"运算符
    九度教程第22题——今年暑假不AC(看尽量多的电视节目)
    C++标准模板库 ——堆栈使用
    .Net转Java自学之路—基础巩固篇十三(集合)
    .Net转Java自学之路—基础巩固篇十二(多线程)
    .Net转Java自学之路—基础巩固篇十(异常)
    .Net转Java自学之路—基础巩固篇九(Object、内部类)
    .Net转Java自学之路—基础巩固篇八—总结(封装、继承、多态)
    .Net转Java自学之路—基础巩固篇七(接口、多态)
    .Net转Java自学之路—基础巩固篇六(继承)
  • 原文地址:https://www.cnblogs.com/candyzhmm/p/7119660.html
Copyright © 2011-2022 走看看