我有一个工作流程,其中包含我正在VS2017上编辑的多个活动。此工作流在这里:
C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml
此工作流程中填充了活动,其中一个活动的类型为MyPathActivity
。此活动有一个按钮。单击该按钮时(在设计时从ThisFile.xaml
开始),我希望它显示带有文本MessageBox
的{{1}},但我不知道如何获得该路径。 / p>
如何在设计时获取xaml文件的路径?
我尝试过的所有工作都使我进入了VS调试器路径,即项目的根路径,...但是我需要我正在编辑的xaml的完整路径。
答案 0 :(得分:0)
我设法获得了xaml路径:
我们指向EditingContext
(Context
的{{1}}属性),然后指向其ActivityDesigner
属性。这些项目是这些类型的ContextItem的集合:
现在 Items
听起来很像有用的东西=)
指向该项目的属性 WorkflowFileItem
,我们得到:
LoadedFile
万岁!
现在输入代码:
C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml
在点击处理程序中的用法:
public static class DesignerUtils
{
public static string GetXamlPathFromActivityDesignerElement<TActivityDesigner
(TActivityDesigner designer) where TActivityDesigner : ActivityDesigner
{
EditingContext editingContext = designer.Context;
ContextItemManager items = editingContext.Items;
WorkflowFileItem fileItem = (WorkflowFileItem)items
.SingleOrDefault(item => item is WorkflowFileItem);
return fileItem.LoadedFile;
}
}
编辑:第一个版本需要事件发送者。这是完全不必要的步骤,因为我们已经让设计人员使用public void OnPathButtonClick(object sender, RoutedEventArgs e)
{
string xamlPath = DesignerUtils
.GetXamlPathFromActivityDesignerElement<MyPathActivityDesigner>
(sender as FrameworkElement);
MessageBox.Show(xamlPath);
}