0

InArgument<String>カスタムアクティビティデザイナ(再ホスト)で使用するためにを変換しようとして問題が発生しました。floatこれは、やなどのデータ型で非常にうまく機能するようになりintました。アイデアは、ユーザーに最も直感的な方法で設定を入力させることです。たとえばTextBox、ユーザーを使用して、リテラル番号(つまり、9)またはVB式(つまり、変数num)を入力できます。コンバーターの例を次に示します。

public class InArgumentIntConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ModelItem modelItem = value as ModelItem;
        if (modelItem != null)
        {
            InArgument<int> inArgument = modelItem.GetCurrentValue() as InArgument<int>;

            if (inArgument != null)
            {
                Activity<int> expression = inArgument.Expression;
                VisualBasicValue<int> vbexpression = expression as VisualBasicValue<int>;
                Literal<int> literal = expression as Literal<int>;

                if (literal != null)
                {
                    return literal.Value.ToString();
                }
                else if (vbexpression != null)
                {
                    return vbexpression.ExpressionText;
                }
            }
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string itemContent = (string)value;
        InArgument<int> inArgument = null;
        try
        {
            int literal = int.Parse(itemContent);
            inArgument = new InArgument<int>(literal);
        }
        catch (FormatException)
        {
            VisualBasicValue<int> vbArgument = new VisualBasicValue<int>(itemContent);
            inArgument = new InArgument<int>(vbArgument);
        }
        catch (OverflowException)
        {
            MessageBox.Show("Your number is too big!");
        }

        return inArgument;
    }
}

ここで重要なのは、適切なParse()方法を使用してテキストボックスの値がリテラルか式かを検出できることですが、文字列が通常の古い文字列か式かをテストする方法はないようです。

値をリテラルとして解析すると式が壊れますが、式として解析すると、リテラル値のテキストボックス内の値を引用符で囲みます。

だから、私の質問は、式がリテラル文字列であるか式であるかをどのようにテストするのですか?

編集:

明確にするために、私が達成しようとしている最終結果は、ユーザーがWindows.Controls.TextBoxリテラル値に引用符を使用せずに、リテラル文字列または式のいずれかをに入力できることです。(これをより明確にするために画像を追加しようとしましたが、まだ十分な評判がないので、ASCIIアートで行う必要があります)。

表示されるはずです:

  +-------------------------+          +-----------------------------+
  | Some Literal value      |    or    | foo + "Some expression"     |
  +-------------------------+          +-----------------------------+

次のように表示しないでください:(式、つまりVisualBasicValueとして解析するときに発生します)

  +-------------------------+          +-----------------------------+
  | "Some Literal value"    |    or    | foo + "Some expression"     |
  +-------------------------+          +-----------------------------+

次のように表示しないでください:(リテラル、つまりリテラルとして解析するときに発生します)

  +-------------------------+          +-----------------------------+
  | Some Literal value      |    or    | "foo + "Some expression""   |
  +-------------------------+          +-----------------------------+
4

1 に答える 1

0

あなたのコードからは、あなたが何をしているのか完全には理解できませんが、ここで車輪を発明していると思います。

通常の WPF TextBox を使用していますか? あなたが説明していることを正確に行うExpressionTextBoxが利用可能です。カスタム コンバーターを作成する必要はありません。

この例を確認してください: Windows Workflow Foundation (WF4) でカスタム アクティビティ デザイナーを作成する方法

于 2013-03-09T14:39:57.883 に答える