Twitter 上で @koty さんからこのような話が出たので作ってみました。
確かにデザイナ上というかワークフロー上にコメント的なものが用意できると見た目にわかりやすくなるなー、と思いながらとりあえず的な物としてですが・・・。
今回はデザイナー上で直接入力も行いたかったので、デザイナーの XAML とアクティビティのソースを記載します。
1: <sad:ActivityDesigner x:Class="MultilineCommentActivityDesigner"
2: x:Uid="MultilineCommentActivityDesigner"
3: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5: xmlns:s="clr-namespace:System;assembly=mscorlib"
6: xmlns:sad="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
7: xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"
8: xmlns:sadc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation"
9: xmlns:sa="clr-namespace:System.Activities;assembly=System.Activities">
10:
11: <sad:ActivityDesigner.Resources>
12: <ResourceDictionary>
13: <sadc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" />
14: </ResourceDictionary>
15: </sad:ActivityDesigner.Resources>
16:
17: <Grid>
18: <sapv:ExpressionTextBox
19: Expression="{Binding Path=ModelItem.CommentStrings, Mode=TwoWay,
20: Converter={StaticResource ArgumentToExpressionConverter},
21: ConverterParameter=In }"
22: ExpressionType="s:String"
23: OwnerActivity="{Binding Path=ModelItem}"
24: AcceptsReturn="True" VerticalScrollBarVisibility="Auto" />
25: </Grid>
26:
27: </sad:ActivityDesigner>
XAML 部分はこのような感じです。ExpressionTextBox を一つぺたっよ貼り付けて複数行入力可能にしてみた感じですね。続いてはアクティビティ本体のソースです。
1: Imports System.Activities
2: Imports System.ComponentModel
3:
4: <Designer(GetType(MultilineCommentActivityDesigner))>
5: Public Class MultilineCommentActivity
6: Inherits CodeActivity
7:
8: Public Property CommentStrings As InArgument(Of String)
9:
10: Protected Overrides Sub Execute(ByVal context As System.Activities.CodeActivityContext)
11: End Sub
12:
13: Protected Overrides Sub CacheMetadata(metadata As System.Activities.CodeActivityMetadata)
14: End Sub
15:
16: End Class
ポイントは CacheMetadata メソッドをオーバライドして処理を何も行わない 点です。デザイナ上での検証エラーは上記メソッドにて発生しますので、ここを何もしないようにしています。最初に貼り付けたスクリーンショットでも、アクティビティとしてはエラーがない状態になっているのがわかると思います。
ただし。
実際にはやはりエラーになっていますので、プロパティダイアログから見に行くとこのような事に・・・w
ですがアクティビティ自体はエラー無という扱いになっていますので、問題なくワークフローの実行等は行えます。
ありがとうございます。
返信削除VisualStudioのデザイナ上だと、無駄に整形されちゃうんですよね。
テスト的なコメント
テスト的なコメント()
という風に。。。リホスティングデザイナだと大丈夫。まったく、VisualStudioは余計なことしてくれます。かわりに(?)インテリセンスが使えるのが良い点でしょうか。
@kotyさんコメントありがとうございます。
返信削除インテリセンスも一応リホスティングにて利用できるのですが、自前でそれを用意するとなるとなかなか手間なのが難点です。ただ、調べていると色々可能性が見えてくるのでいつかは挑戦してみたいところですね。