4

私は少しグーグルで検索しましたが、Xaml-fyingアクティビティの例を見つけることができないようです-良い、悪い、またはそれ以外の場合!

public static string ToXaml (this Activity activity)
{
    // i would use ActivityXamlServices to go from Xaml
    // to activity, but how to go other way? documentation
    // is slim, and cannot infer proper usage of 
    // ActivityXamlServices from Xml remarks :S
    string xaml = string.Empty;
    return xaml;
}

ヒント、ヒント、ポインタは大歓迎です:)


:これを見つけまし。動作し、動作したら更新します。誰もが私を殴りたいと思っています。さらに良いことに、WorkflowDesignerを取り除く方法を見つけることができれば、それが必要なのは奇妙に思えます。

4

3 に答える 3

4

了解しました。このフォーラムの投稿に取り組みました。

よく知られているアクティビティをXaml-fy[つまり、インスタンスを宣言型Xamlに変換]することができます。

public static string ToXaml (this Activity activity)
{
    StringBuilder xaml = new StringBuilder ();

    using (XmlWriter xmlWriter = XmlWriter.Create (
        xaml, 
        new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true, }))

    using (XamlWriter xamlWriter = new XamlXmlWriter (
        xmlWriter, 
        new XamlSchemaContext ()))

    using (XamlWriter xamlServicesWriter = 
        ActivityXamlServices.CreateBuilderWriter (xamlWriter))
    {
        ActivityBuilder activityBuilder = new ActivityBuilder 
        {
            Implementation = activity
        };
        XamlServices.Save (xamlServicesWriter, activityBuilder);
    }

    return xaml.ToString ();
}

Xamlには、xmlns:sap = "..."として表示されるSystem.Activities.Presentation名前空間への参照など、特定のアーティファクトが含まれている場合があります。これでソリューションに問題が発生する場合は、上記のソースリンクをお読みください。認識されない名前空間を無視するようにディレクティブを挿入する方法があります。

これはしばらく開いたままにしておきます。誰かがより良い解決策を見つけることができるか、これを改善できるなら、ぜひ:)

于 2010-02-25T20:35:05.670 に答える
3

どうXamlServices.Save(filename, activity)ですか?

于 2010-12-31T03:00:51.510 に答える
0

他のソリューション(VS2010B2用)といくつかのReflectoringに基づいて、VS2010RC用のソリューションを見つけました。XamlWriterはRCで抽象的であるため、アクティビティツリーをシリアル化する新しい方法は次のとおりです。

public static string ToXaml (this Activity activity)
{
    var xamlBuilder = new StringBuilder();
    var xmlWriter = XmlWriter.Create(xamlBuilder,
        new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true });
    using (xmlWriter)
    {
        var xamlXmlWriter =
            new XamlXmlWriter(xmlWriter, new XamlSchemaContext());
        using (xamlXmlWriter)
        {
            XamlWriter xamlWriter =
                ActivityXamlServices.CreateBuilderWriter(xamlXmlWriter);
            using (xamlWriter)
            {
                var activityBuilder =
                    new ActivityBuilder { Implementation = sequence };
                XamlServices.Save(xamlWriter, activityBuilder);
            }
        }
    }
    return xamlBuilder.ToString();
}
于 2010-03-24T19:11:03.500 に答える