我正在构build一个简单的待办事项列表应用程序,我希望能够在桌面上放置多个列表,以便标记和pipe理任务。
我的应用程序中的相关UIElements是:
Window1(Window)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>
我有这些窗口的多个实例,我想能够拖动窗口之间的任何控件。 我曾尝试使用一个拇指控制,而这个工程,它只允许我拖动包含canvas周围的控件。
如何模仿Windows资源pipe理器的行为,我可以将文件拖到应用程序之外,然后拖到另一个应用程序上,同时在光标下看到文件的幻影表示。
我可以完成这纯粹在C#和WPF? 如果是这样/如果没有,如何?
您必须调用DoDragDrop来初始化拖放框架。 Jaime Rodriguez提供了一个拖放指南
就像“参考”一样,“拖动控件”和“浏览器”做什么,拖放操作,特别是文件操作,都有很大的不同。 这就是你想要查看,如何从WPF应用程序拖放到其他东西。 你将需要创建一个数据对象(IDataObject)或任何他们在WPF世界中调用的东西,然后你需要调用DoDragDrop(再次,或WPF中类似于这个)来开始拖动。 做什么探险家做也是可能的,把我怀疑你需要做一些较低级别的电话来完成这一点。 看看http://www.codeproject.com/KB/wtl/wtl4mfc10.aspx看到你所需要的东西ot寻找。 事实上,WPF可能会把所有这些包起来,但是如果不是这些,你需要研究一些东西,特别是IDragSourceHelper。