我撰寫了一個自定義 WPF 標記擴展來格式化字串。它看起來像這樣:
using System;
using System.Windows.Markup;
namespace MarkupExtensions;
public class InterpolationExtension : MarkupExtension
{
public object Value { get; set; }
public object[] Arguments { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (Arguments is not null)
return string.Format((string)Value, Arguments);
return null;
}
public InterpolationExtension(object value)
{
Value = value;
}
public InterpolationExtension()
{
}
}
但是如果我想在 XAML 中使用它,我必須使用這種笨拙的語法(GreetMultiple只是一個字串資源"Hello, {0}, {1} and {2}!":
<Run>
<Run.Text>
<e:Interpolation>
<e:Interpolation.Value>
<StaticResource ResourceKey="GreetMultiple"/>
</e:Interpolation.Value>
<e:Interpolation.Arguments>
<x:Array Type="{x:Type sys:String}">
<sys:String>A</sys:String>
<sys:String>B</sys:String>
<sys:String>C</sys:String>
</x:Array>
</e:Interpolation.Arguments>
</e:Interpolation>
</Run.Text>
</Run>
有沒有辦法像這樣在一行中指定陣列元素?
<Run Text="{e:Interpolation Value={StaticResource GreetMultiple}, Arguments={x:Array Type={x:Type sys:String}, Items=[A,B,C]}}"/>
[ ]除了語法之外,這一切都有效。
uj5u.com熱心網友回復:
您也可以使用 MarkupExtension 來簡化陣列的構造。
下面的 MarkupExtension 最多可以處理 5 個元素 buf 如果您需要更多元素,請添加更多建構式。
[MarkupExtensionReturnType(typeof(object[]))]
public class ArrayConstructorExtension : MarkupExtension
{
private readonly object[] _elements;
public ArrayConstructorExtension(object a) => _elements = new[] { a };
public ArrayConstructorExtension(object a, object b) => _elements = new[] { a, b };
public ArrayConstructorExtension(object a, object b, object c) => _elements = new[] { a, b, c };
public ArrayConstructorExtension(object a, object b, object c, object d) => _elements = new[] { a, b, c, d };
public ArrayConstructorExtension(object a, object b, object c, object d, object e) => _elements = new[] { a, b, c, d, e };
public override object ProvideValue(IServiceProvider serviceProvider)
{
return _elements;
}
}
然后可以按如下方式使用:
<Run Text="{e:Interpolation Value={StaticResource GreetMultiple}, Arguments={e:ArrayConstructor A, B, C}}"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485876.html
上一篇:如何在python中比較串列
