在设计时获取xaml目录路径

时间:2018-11-27 12:12:59

标签: c# wpf xaml workflow-foundation

我有一个工作流程,其中包含我正在VS2017上编辑的多个活动。此工作流在这里: C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml

此工作流程中填充了活动,其中一个活动的类型为MyPathActivity。此活动有一个按钮。单击该按钮时(在设计时从ThisFile.xaml开始),我希望它显示带有文本MessageBox的{​​{1}},但我不知道如何获得该路径。 / p>

如何在设计时获取xaml文件的路径?

我尝试过的所有工作都使我进入了VS调试器路径,即项目的根路径,...但是我需要我正在编辑的xaml的完整路径。

1 个答案:

答案 0 :(得分:0)

我设法获得了xaml路径:

我们指向EditingContextContext的{​​{1}}属性),然后指向其ActivityDesigner属性。这些项目是这些类型的ContextItem的集合:

  • ReadOnlyState
  • AssemblyContextControlItem
  • WorkflowCommandExtensionItem
  • WorkflowFileItem
  • 选择

现在 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); }