我正在尝试在 WPF 应用程序中托管工作流设计器。WorkflowView 控件托管在 WindowsFormsHost 控件下。我设法将工作流加载到设计器上,该设计器成功链接到 PropertyGrid,也托管在另一个 WindowsFormsHost 中。
WorkflowView workflowView = rootDesigner.GetView(ViewTechnology.Default) as WorkflowView;
window.WorkflowViewHost.Child = workflowView;
大多数重新托管代码与http://msdn.microsoft.com/en-us/library/aa480213.aspx中的相同。
我使用绑定到 ToolboxItems 列表的 ListBox WPF 控件创建了一个自定义工具箱。
<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>
在 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);
}
}
使用该设置,我无法将自定义工具箱中的任何项目拖到设计器上。光标在设计器的任何位置始终显示为“否”。
我已经尝试在网上找到有关此的任何信息半天了,我真的希望有人可以在这里帮助我。
非常感谢任何反馈。谢谢!
卡洛斯