【问题标题】:Get xaml directory path at design time在设计时获取 xaml 目录路径
【发布时间】:2018-11-27 12:12:59
【问题描述】:

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

此工作流填充有活动,其中一个活动的类型为 MyPathActivity。这个活动有一个按钮。单击该按钮时(在设计时从 ThisFile.xaml 开始),我希望它显示带有文本 C:/Repo/Workflows/ProjectXyz/Foo/ThisFile.xaml 的 MessageBox,但我不知道如何获取该路径。

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

我所做的一切都让我进入了 VS 调试器路径、项目的根路径……但我需要我正在编辑的 xaml 的完整路径。

【问题讨论】:

    标签: c# wpf xaml workflow-foundation


    【解决方案1】:

    我已经设法获得了 xaml 路径:

    我们指向EditingContext(ActivityDesigner 的Context 属性),然后指向它的Items 属性。这些项目是这些类型的 ContextItems 的集合:

    • 只读状态
    • AssemblyContextControlItem
    • WorkflowCommandExtensionItem
    • 工作流文件项
    • 选择

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

    编辑:第一个版本需要事件发送者。这是一个完全不必要的步骤,因为我们已经让设计师使用this

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2023-03-02
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多