如何构建一个WPF应用程序,我可以在窗口之间拖放用户控件?

时间:2008-10-01 16:06:03

标签: c# wpf windows user-interface

我正在构建一个简单的Todo List应用程序,我希望能够在桌面上放置多个列表,我可以在其中标记和管理任务。

我的应用程序中的相关UIElements是:

Window1(窗口) TodoList(用户控制) TodoStackCard(用户控制)

Window1看起来像这样:

<Window x:Class="TaskHole.App.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:t="clr-namespace:TaskHole.App.Controls"
    xmlns:tcc="clr-namespace:TaskHole.CustomControls"
    Title="Window1" Width="500" Height="500" Background="Transparent" WindowStyle="None" AllowsTransparency="True" >
    <Canvas Name="maincanvas" Width="500" Height="500" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <ResizeGrip SizeChanged="ResizeGrip_SizeChanged" />
        <t:TodoList Canvas.Top="0" Canvas.Left="0" MinWidth="30" Width="50" Height="500" x:Name="todoList" TaskHover="todoList_TaskHover" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </Canvas>
</Window>

TodoList看起来像这样:

<UserControl x:Class="TaskHole.App.Controls.TodoList"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:t="clr-namespace:TaskHole.App.Controls"
    xmlns:tcc="clr-namespace:TaskHole.CustomControls"
    Background="Transparent">
<StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Stretch" MinWidth="1" Grid.Row="2" Height="Auto" AllowDrop="True">
<ItemsControl Name="todolist" ItemsSource="{Binding}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel Name="stackPanel" VerticalAlignment="Bottom">

                                </VirtualizingStackPanel>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <t:TodoStackCard x:Name="card" TaskHover="card_TaskHover" Orientation="Vertical" VerticalContentAlignment="Top" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
</StackPanel>
</UserControl>

我有这些窗口的多个实例,我希望能够在窗口之间拖动任何控件。我尝试过使用Thumb控件,虽然这样可行,但它只允许我在包含画布周围拖动一个控件。

我如何模仿Windows资源管理器的行为,在那里我可以将文件拖到应用程序之外并拖到另一个应用程序上,同时在光标下看到文件的幻影表示。

我可以在C#和WPF中完成这个吗?如果是这样/如果没有,怎么样?

2 个答案:

答案 0 :(得分:2)

您必须调用DoDragDrop来初始化Drag and Drop框架。 Jaime Rodriguez提供拖放指南here

答案 1 :(得分:1)

就像一个FYI一样,“拖动控件”和执行资源管理器的操作有很大的不同,即拖放,特别是文件。这就是你想要查找的内容,如何从WPF应用程序拖放到其他东西。你需要创建一个数据对象(IDataObject)或者他们在WPF世界中调用它们的东西,然后你需要调用DoDragDrop(再次,或者在WPF中与此类似的任何东西)来开始拖动。做探险家的工作也是可能的,我怀疑你需要做一些较低级别的电话来完成这个。看看http://www.codeproject.com/KB/wtl/wtl4mfc10.aspx,看看你需要寻找的东西。实际上,WPF可以包装所有这些,但如果不是这些,则需要考虑这些内容,尤其是IDragSourceHelper。

相关问题