WPF怎么实现工具栏拖拽
时间: 2024-01-30 12:00:10 浏览: 117
基于C# WPF 【批量缩略图/压缩】工具 支持拖拽
3星 · 编辑精心推荐
WPF可以通过以下步骤实现工具栏拖拽:
1. 在XAML中定义工具栏和要拖拽的控件。
2. 在工具栏和要拖拽的控件上分别设置AllowDrop和DragDrop.Drop事件。
3. 在工具栏的DragDrop.Drop事件处理程序中获取拖拽的控件并添加到工具栏中。
4. 在要拖拽的控件的DragDrop.Drop事件处理程序中获取其父控件(即工具栏)并从中移除该控件。
5. 在要拖拽的控件的MouseDown事件处理程序中设置DragDrop.DoDragDrop方法以开始拖拽操作。
6. 在要拖拽的控件的MouseMove事件处理程序中设置DragDrop.DoDragDrop方法以实时更新拖拽的位置。
7. 在要拖拽的控件的QueryContinueDrag事件处理程序中检查拖拽操作是否已完成,如果完成则移除拖拽的控件。
以下是示例代码:
XAML:
<ToolBar x:Name="MyToolBar" Width="500" Height="30" AllowDrop="True" DragDrop.Drop="MyToolBar_Drop">
<Button x:Name="btn1" Content="Button 1" AllowDrop="True" DragDrop.Drop="btn1_Drop" MouseDown="btn1_MouseDown" MouseMove="btn1_MouseMove"/>
<Button x:Name="btn2" Content="Button 2" AllowDrop="True" DragDrop.Drop="btn2_Drop" MouseDown="btn2_MouseDown" MouseMove="btn2_MouseMove"/>
</ToolBar>
C#:
private void MyToolBar_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Button)))
{
Button btn = (Button)e.Data.GetData(typeof(Button));
MyToolBar.Items.Add(btn);
}
}
private void btn1_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Button)))
{
Button btn = (Button)e.Data.GetData(typeof(Button));
MyToolBar.Items.Remove(btn);
}
}
private void btn2_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Button)))
{
Button btn = (Button)e.Data.GetData(typeof(Button));
MyToolBar.Items.Remove(btn);
}
}
private void btn1_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(btn1, btn1, DragDropEffects.Move);
}
}
private void btn2_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(btn2, btn2, DragDropEffects.Move);
}
}
private void btn1_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(btn1, btn1, DragDropEffects.Move);
}
}
private void btn2_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(btn2, btn2, DragDropEffects.Move);
}
}
需要注意的是,以上示例代码仅适用于工具栏中只包含按钮的情况。如果工具栏中包含其他类型的控件,需要根据实际情况进行修改。
阅读全文