Expression Editor for UWP
カスタム関数の作成
Expression Editor の操作 > カスタム関数の作成

Expression Editor provides various built-in functions to create expressions for your applications. Furthermore, it allows you to define custom functions according to your application’s requirement. The AddFunction method of C1ExpressionEditor class allows you to add custom functions to Expression Editor. This custom function gets added to the ExpressionEditor engine and is accessible at runtime by C1ExpreesionEditor for performing calculations.

The following image shows a custom function used in the ExpressionEditor control.

The following code demonstrates how a custom function is created and added to the Expression Editor panel:

Public NotInheritable Partial Class MainPage
    Inherits Page

    Public Sub New()
        Me.InitializeComponent()
        ExpressionPanel.ExpressionEditor = ExpressionEditor
        Dim factItem As ExpressionItem = New ExpressionItem("Factorial", "Factorial()", "Returns the product of an integer and all the integers below it.", ItemType.MathFuncs)
        factItem.Arguments.Add(New Argument("number", GetType(System.Double)))
        ExpressionEditor.AddFunction(factItem, AddressOf Factorial, 1, 1)
    End Sub

    Private Function Factorial(ByVal list As List(Of Object)) As Object
        Dim items As List(Of Object) = New List(Of Object)()
        items = items.Concat(list).ToList()
        Dim i, number As Integer, fact As Integer = 1
        number = Convert.ToInt32(items(0))

        For i = 1 To number
            fact = fact * i
        Next

        Return fact
    End Function

    Private Sub ExpressionEditor_ExpressionChanged(ByVal sender As Object, ByVal e As EventArgs)
        If Not ExpressionEditor.IsValid Then
            Result.Text = ""
        Else
            Result.Text = ExpressionEditor.Evaluate()?.ToString()
        End If
    End Sub
End Class
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        ExpressionPanel.ExpressionEditor = ExpressionEditor;
        ExpressionItem factItem = new ExpressionItem("Factorial", "Factorial()",
        "Returns the product of an integer and all the integers below it.",
        ItemType.MathFuncs);
        factItem.Arguments.Add(new Argument("number", typeof(System.Double)));
        ExpressionEditor.AddFunction(factItem, Factorial, 1, 1);
    }

    private object Factorial(List<object> list)
    {
        List<object> items = new List<object>();
        items = items.Concat(list).ToList();

        int i, fact = 1, number;
        number = Convert.ToInt32(items[0]);
        for (i = 1; i <= number; i++)
        {
            fact = fact * i;
        }

        return fact;
    }

    private void ExpressionEditor_ExpressionChanged(object sender, EventArgs e)
    {
        if (!ExpressionEditor.IsValid)
        {
            Result.Text = "";
        }
        else
        {
            Result.Text = ExpressionEditor.Evaluate()?.ToString();
        }
    }
}