Die .NET Regex Klasse besitzt keinen öffentlichen Konstruktor was das Zuweisen eines Regex in XAML erschwert.
Diese Klasse bietet einen Anfang um einfach einen Regex im XAML zu instanziieren. Beispielsweise so:
<ns:MyControl AllowedUrlRegex="{controls:Regex Regex=(?i:^http://code-13.net/)}" />
Benötigte NamespacesSystem
System.Text.RegularExpressions
Xamarin.Forms.Xaml
/// <summary>
/// Stelllt eine Markup-Erweiterung für Xamarin.Forms für die Erstellung eines <see cref="System.Text.RegularExpressions.Regex"/> bereit.
/// </summary>
public class RegexExtension : IMarkupExtension<Regex>
{
/// <summary>
/// Erstellt eine neue Instanz der <see cref="RegexExtension"/>-Klasse.
/// </summary>
public RegexExtension() { }
/// <summary>
/// Erstellt eine neue Instanz der <see cref="RegexExtension"/>-Klasse unter angabe des regulären Ausdrucks.
/// </summary>
/// <param name="regex">Der zu verwendende reguläre Ausdruck.</param>
public RegexExtension(string regex) : this()
{
this.Regex = regex;
}
/// <summary>
/// Ruft den regulären Ausdruck ab oder legt diesen fest.
/// </summary>
public string Regex { get; set; }
/// <summary>
/// Ruft den regulären Ausdruck als <see cref="System.Text.RegularExpressions.Regex"/>-Instanz ab.
/// </summary>
/// <param name="serviceProvider">Wird ignoriert.</param>
/// <returns>Eine <see cref="System.Text.RegularExpressions.Regex"/>-Instanz, erstellt aus <see cref="Regex"/>.</returns>
public Regex ProvideValue(IServiceProvider serviceProvider)
{
return new Regex(this.Regex);
}
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return this.ProvideValue(serviceProvider);
}
}
Kommentare zum Snippet