WPF之实现控件内容拖动

Posted qcst123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF之实现控件内容拖动相关的知识,希望对你有一定的参考价值。

 以下分别记录label、listbox、treeview三个控件的拖动示例:

1.对被拖动控件,实现拖动事件,主要是通过各种鼠标事件,实现DragDrop.DoDragDrop方法。

2.对于需要拖动到的目的控件,需要实现AllowDrop="True" Drop="TargetLabel_Drop"

   <Window.Resources>
        <Style TargetType="ListBoxItem">
            <EventSetter Event="PreviewMouseMove" Handler="ListBox_PreviewMouseMove"/>
        </Style>
        <Style TargetType="TreeViewItem">
            <EventSetter Event="PreviewMouseMove" Handler="TreeView_PreviewMouseMove"/>
        </Style>
      
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="7*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <StackPanel>
            <Label Name="Label" Margin="5,10" Content="This is Label" MouseDown="Label_MouseDown"/>
            <ListBox Margin="5,10">
                <ListBoxItem>000</ListBoxItem>
                <ListBoxItem>111</ListBoxItem>
                <ListBoxItem>222</ListBoxItem>
            </ListBox>
            <TreeView Name="treeView" Margin="5,10">
                <TreeViewItem Header="aa">
                    <TreeViewItem Header="00"/>
                    <TreeViewItem Header="11"/>
                    <TreeViewItem Header="22"/>
                </TreeViewItem>
            </TreeView>
            <Button Height="30" Margin="5,10" Name="btn" Content="Rest" Click="btn_Click"/>
        </StackPanel>
        <Rectangle Grid.Column="1" Fill="Red" Width="1"/>
        <Label Name="TargetLabel" Grid.Column="2" Content="Come here"  Background="AliceBlue" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" AllowDrop="True" Drop="TargetLabel_Drop"/>
    </Grid>

 

  private void TargetLabel_Drop(object sender, DragEventArgs e)
        {
            var txt = e.Data.GetData(DataFormats.Text);
            this.TargetLabel.Content = txt;
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            this.TargetLabel.Content = "Come here";
        }

        private void Label_MouseDown(object sender, MouseButtonEventArgs e)
        {
            DragDrop.DoDragDrop(Label, Label.Content, DragDropEffects.Copy);
        }

        private void ListBox_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            var item = sender as ListBoxItem;
            DragDrop.DoDragDrop(item, item.Content, DragDropEffects.Copy);
        }

        private void TreeView_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton==MouseButtonState.Released)
            {
                return;
            }

            var t = sender as TreeView;
            var x = this.treeView.SelectedItem;
            if (x==null)
            {
                return;
            }
            var item = x as TreeViewItem;
            DragDrop.DoDragDrop(item, item.Header, DragDropEffects.Copy);
        }

 

以上是关于WPF之实现控件内容拖动的主要内容,如果未能解决你的问题,请参考以下文章

WPF 拖动实现

C# wpf 实现任意控件拖动

求助,WPF如何实现控件的拖动与复制

WPF实现鼠标拖动控件并带有中间动效

wpf怎么实现主窗口向用户控件传值?

WPF这可能是全网最全的拖拽实现方法的总结