大佬教程收集整理的这篇文章主要介绍了Silverlight 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,请注明来意。