silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight ListBox拖放大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

1.ListBox在没有添加任何Item是的拖放可以完全参照Button的拖放 2.当ListBox添加了Item时,会出现ListBox不相应listBox1_MouSELEftButtonDown的问题 解决方法: 原因: ListBox中,MouSELEftButtonDown事件是一个RoutedEvent , 并且在routIng过程中被标记为handled, 因此ListBox不会再抛

1.ListBox在没有添加任何Item是的拖放可以完全参照Button的拖放
2.当ListBox添加了Item时,会出现ListBox不相应listBox1_MouSELEftButtonDown的问题
解决方法:
原因: ListBox中,MouSELEftButtonDown事件是一个RoutedEvent,并且在routIng过程中被标记为handled, 因此ListBox不会再抛出该事件,因此你的事件处理方法也无从相应。

@L_489_12@: 使用UIElement.AddHandler 方法指定已经被handled的事件。

        bool trackingMouseMove = false;
        Point mousePosition;

       public listBox添加项后的拖放()
        {
            InitializeComponent();           
            listBox1.AddHandler(ListBox.MouSELEftButtonDownevent,
                new MouseButtonEventHandler(listBox1_MouSELEftButtonDown),truE);
            //listBox1.AddHandler(ListBox.MouSELEftButtonUpEvent,
            //    new MouseButtonEventHandler(listBox1_MouSELEftButtonUp),truE);
            //注意MouseMove不需要添加,只需要@L_654_1@mouSELEftButtonDown即可
        }

 

        private void listBox1_MouSELEftButtonDown(object sender,MouseButtonEventArgs E)
        {
            FrameworkElement element = sender as FrameworkElement;
            mousePosition = e.GetPosition(null);
            trackingMouseMove = true;
            if (null != element)
            {
                element.CaptureMouse();
                element.cursor = cursors.Hand;
            }
        }   


       private void listBox1_MouSELEftButtonUp(object sender,MouseButtonEventArgs E)
        {
            FrameworkElement element = sender as FrameworkElement;
            trackingMouseMove = false;
            element.ReleaseMouseCapture();

            mousePosition.X = mousePosition.Y = 0;
            element.cursor = null;
        }

        private void listBox1_MouseMove(object sender,MouseEventArgs E)
        {
            FrameworkElement element = sender as FrameworkElement;
            if (trackingMouseMovE)
            {
                double deltaV = e.GetPosition(null).Y - mousePosition.Y;
                double deltaH = e.GetPosition(null).X - mousePosition.X;
                double newTop = deltaV + (doublE)element.GetValue(Canvas.TopProperty);
                double newLeft = deltaH + (doublE)element.GetValue(Canvas.LeftProperty);

                element.SETVALue(Canvas.TopProperty,newTop);
                element.SETVALue(Canvas.LeftProperty,newLeft);

                mousePosition = e.GetPosition(null);
            }
        }
3.===================拖放一个ListBox的Item到另外一个ListBox===============
主要代码
   public partial class listBox拖放Item : Page
    {
        bool trackingMouseMove = false;
        Point mousePosition;
        double newTop;
        double newLeft;

        public listBox拖放Item()
        {
            InitializeComponent();
            listBox1.AddHandler(ListBox.MouSELEftButtonDownevent,truE);
            //注意此处不能加listBox1_MouSELEftButtonUp的处理了,否则MouSELEftButtonUp会被触发两次
            //listBox1.AddHandler(ListBox.MouSELEftButtonUpEvent,truE);
        }

        // 当用户导航到此页面时执行。
        protected override void OnNavigatedTo(NavigationEventArgs E)
        {
        }

        private void Page_Loaded(object sender,RoutedEventArgs E)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("选项1");
            listBox1.Items.Add("选项2");
            listBox1.Items.Add("选项3");
        }

        private void listBox1_MouSELEftButtonDown(object sender,MouseButtonEventArgs E)
        {
            FrameworkElement element = sender as FrameworkElement;
            mousePosition = e.GetPosition(null);
            trackingMouseMove = true;
            if (null != element)
            {
                element.CaptureMouse();
                element.cursor = cursors.Hand;
            }
        }

        private void listBox1_MouSELEftButtonUp(object sender,MouseButtonEventArgs E)
        {
            double dblListBox2Left = (doublE)listBox2.GetValue(Canvas.LeftProperty);
            double dblListBox2Top = (doublE)listBox2.GetValue(Canvas.TopProperty);
            if (newLeft >= dblListBox2Left && newLeft <= (dblListBox2Left + listBox2.Width))
            {
                if (newTop >= dblListBox2Top && newTop <= (dblListBox2Top + listBox2.Height))
                {
                    listBox2.Items.Add(listBox1.SELEctedItem.ToString());
                }
            }
            FrameworkElement element = sender as FrameworkElement;
            trackingMouseMove = false;
            element.ReleaseMouseCapture();
            //清空坐标
            newTop = 0;
            newLeft = 0;
            element.cursor = null;
        }

        private void listBox1_MouseMove(object sender,MouseEventArgs E)
        {
            FrameworkElement element = sender as FrameworkElement;
            if (trackingMouseMovE)
            {
                //记录鼠标位置
                newTop = e.GetPosition(null).Y;
                newLeft = e.GetPosition(null).X;
            }
        }

    }

 

xaml代码
<navigation:Page x:Class="Silverlight拖放.listBox添加项后的拖放"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"            mc:Ignorable="d"            xmlns:navigation="clr-namespace:Sy@L_618_67@.Windows.Controls;assembly=Sy@L_618_67@.Windows.Controls.Navigation"            d:DesignWidth="640" d:DesignHeight="480"            title="listBox添加项后的拖放 Page" Loaded="Page_Loaded">     <Canvas BACkground="#46461F">         <ListBox Canvas.Left="27" Canvas.Top="23" Height="187" Name="listBox1" Width="187" SELEctionMode="Multiple" MouSELEftButtonDown="listBox1_MouSELEftButtonDown" MouSELEftButtonUp="listBox1_MouSELEftButtonUp" MouseMove="listBox1_MouseMove" />     </Canvas> </navigation:Page>

大佬总结

以上是大佬教程为你收集整理的Silverlight ListBox拖放全部内容,希望文章能够帮你解决Silverlight ListBox拖放所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。