在设计图面上显示输入参数
本文关键字:输入 参数 显示 设计图 | 更新日期: 2023-09-27 18:29:58
我正试图弄清楚如何设计我自己的WF4活动表示。例如,我有一个名为AssignMemberDates的活动,它有两个IN参数:一个DataType(来自List<>)和一个RecordType(也来自List&lgt;>)。我有10种不同的日期类型和3种不同的记录类型。我想要的不是创建30个活动,而是单个活动。当我把它拖到WF表面并分配我的2个输入时,我想要的不仅仅是显示的通用"活动"容器。让我们看看我是否可以(使用ASCII)画出这个。。。
我现在得到的:
+-------------------------------+
| [ICON] AssignMemberDates |
+-------------------------------+
我想要什么:
+-------------------------------+
| [ICON] AssignMemberDates |
| Pending / BenefitMonth |
+-------------------------------+
这有道理吗?我知道我需要创建XAML,但我不知道如何捕获InArguments(枚举)并将其显示为文本。我不是希望将其作为编辑器输入。我只想在设计表面上看到活动中的InArguments。
更新:
我在InArguments上使用枚举,这样以后的开发人员就可以在设计器属性上输入什么。它很简单:
public InArgument<DateTypeList> DateType { get; set; }
public InArgument<RecordTypeList> RecordType { get; set; }
我知道如何从枚举中获取字符串。我是一个设计师的新手,正在寻求帮助。我不知道如何在设计图面上显示属性值,而且我似乎可以使用大量的显示"小部件"。
我已经开始使用以下XAML,但还没有走多远——看起来这更像是一个类似于您在属性选项卡中看到的输入:
<sap:ActivityDesigner x:Class="PSI.Workflow.Activities.SouthCarolina.SC1AssignMemberDateDesigner"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="86" d:DesignWidth="200">
<StackPanel>
<sapv:ExpressionTextBox MaxLines="1" ></sapv:ExpressionTextBox>
<sapv:ExpressionTextBox MaxLines="1"></sapv:ExpressionTextBox>
</StackPanel>
</sap:ActivityDesigner>
我不知道如何获取2个输入参数值并显示它们。如果我在HTML中,我会简单地创建一个<label/>控件,然后在页面加载期间提供我想要的值。我也不希望显示元素堆叠,而是用"/"并排分隔。
这更有意义吗?
更新2:
我为什么要用enums?-我们在整个代码库中使用枚举来将输入约束为已知值。我们不想使用"魔术串",我们所有的代码库,200多万行,都依赖于数百个枚举的使用。将枚举转换为字符串没有问题。我们还希望将此活动的输入限制为已知值(枚举)。例如:
public InArgument<DateTypeList> DateType { get; set; } public InArgument<RecordTypeList> RecordType { get; set; } protected override void Execute(NativeActivityContext context) { // In Arguments... var dateType = DateType.Get(context); var recordType = RecordType.Get(context); // Let's get what we need from the context... var member = context.Member(); var mtd = context.MemberTransaction(); var cutoffDates = context.CutoffDates(); DateTime? startDate = null; DateTime? endDate = null; switch (dateType) { case DateTypeList.ARC: startDate = Helpers.GetDate(cutoffDates, CutoffDateType.EnrollmentStart, mtd.assignable.ToBoolean()).AddYears(1); break; case DateTypeList.AutoAssignment: startDate = Helpers.GetDate(cutoffDates, CutoffDateType.AutoAssignment, mtd.assignable.ToBoolean()); break; } Helpers.AssignDate(ref member, dateType, recordType, startDate.Value, endDate);
}
不,我从来没有试过设计这样的东西。我没有XAMLX的经验,我正在从头开始。我只想简单地将枚举的字符串表示转移到设计器表面。这样,当我们与非技术人员一起审查工作流时,它会在活动本身上清楚地显示在活动设置过程中传递的值。
好吧,我来试试。你可能需要给我留言才能获得更多信息。
首先,您的活动没有使其所有属性成为InArgument。只有当属性的值在运行时发生更改时,才会发生这种情况。如果像您的案例中出现的那样,这些属性值是在设计时设置的(当它们被放置在设计图面上时),那么您可以将它们设置为常规属性。
public sealed class MyActivity : NativeActivity
{
public DateTypeList DateType { get; set; }
public RecordTypeList RecordType { get; set; }
// snip
要显示这些值,有几种不同的方法。三个TextBlock,第一个绑定到DateTime,第二个有一个文字斜杠"''",第三个绑定到RecordType。或者,您可以使用MultiBinding,只需使用斜线设置StringFormat。
这很简单。这里有一些类似xaml的伪代码,它演示(即,它没有经过测试)
<StackPanel Orientation="Horizontal">
<TextBlock Text="{{Binding ModelItem.DateType}" />
<TextBlock Text="'" />
<TextBlock Text="{{Binding ModelItem.RecordType }" />
</StackPanel>
第二个
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}'{1}">
<Binding Path="ModelItem.DateType" />
<Binding Path="ModelItem.DateType" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>