J'essaie d'héberger le Workflow Designer dans une application WPF. Le contrôle WorkflowView est hébergé sous un contrôle WindowsFormsHost. J'ai réussi à charger des workflows sur le concepteur qui est lié avec succès à un PropertyGrid, également hébergé dans un autre WindowsFormsHost.Impossible de faire glisser les activités de WPF ListBox dans WorkflowView
WorkflowView workflowView = rootDesigner.GetView(ViewTechnology.Default) as WorkflowView;
window.WorkflowViewHost.Child = workflowView;
La majorité du code rehosting est le même que dans http://msdn.microsoft.com/en-us/library/aa480213.aspx.
J'ai créé une boîte à outils personnalisée à l'aide d'un contrôle ListBox WPF lié à une liste de ToolboxItems.
<ListBox Grid.Row="1" Margin="0 0 0 4" BorderThickness="1" BorderBrush="DarkGray" ItemsSource="{Binding Path=ToolboxItems}" PreviewMouseLeftButtonDown="ListBox_PreviewMouseLeftButtonDown" AllowDrop="True">
<ListBox.Resources>
<vw:BitmapSourceTypeConverter x:Key="BitmapSourceConverter" />
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type dd:ToolboxItem}">
<StackPanel Orientation="Horizontal" Margin="3">
<Image Source="{Binding Path=Bitmap, Converter={StaticResource BitmapSourceConverter}}" Height="16" Width="16" Margin="0 0 3 0" />
<TextBlock Text="{Binding Path=DisplayName}" FontSize="14" Height="16" VerticalAlignment="Center" />
<StackPanel.ToolTip>
<TextBlock Text="{Binding Path=Description}" />
</StackPanel.ToolTip>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Dans le gestionnaire ListBox_PreviewMouseLeftButtonDown:
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListBox parent = (ListBox)sender;
UIElement dataContainer;
//get the ToolboxItem for the selected item
object data = GetObjectDataFromPoint(parent, e.GetPosition(parent), out dataContainer);
//if the data is not null then start the drag drop operation
if (data != null)
{
DataObject dataObject = new DataObject();
dataObject.SetData(typeof(ToolboxItem), data);
DragDrop.DoDragDrop(parent, dataObject, DragDropEffects.Move | DragDropEffects.Copy);
}
}
Avec cette configuration, je ne peux pas faire glisser un élément de ma boîte à outils sur mesure sur le concepteur. Le curseur est toujours affiché comme "Non" n'importe où sur le concepteur.
J'ai essayé de trouver quelque chose à ce sujet sur le net pendant une demi-journée maintenant et j'espère vraiment que certains peuvent m'aider ici.
Tout commentaire est très apprécié. Je vous remercie!
Carlos
Oui, j'ai vérifié à la fois AllowDrop dans les contrôles WindowsFormsHost et WorkflowView et ils sont tous deux mis à true. J'ai également traité le DragEvent et le champ d'argument e.Data contient l'équivalent System.Windows.Forms.DataObject du System.Windows.DataObject que j'ai fait avant d'appeler DragDrop.DoDragDrop. J'ai été en mesure d'obtenir le ToolboxItem de e.Data très bien. – ca7l0s