如何在xaml中设置string []属性的值?有一个属性字符串数组作为XAML中逗号分隔的字符串
我HAVA控制:字符串[] PROPNAME
我想设置这个属性在明年方式的价值:
<ns:SomeControl PropName="Val1,Val2" />
如何在xaml中设置string []属性的值?有一个属性字符串数组作为XAML中逗号分隔的字符串
我HAVA控制:字符串[] PROPNAME
我想设置这个属性在明年方式的价值:
<ns:SomeControl PropName="Val1,Val2" />
您可以使用the <x:Array>
markup extension,但其语法非常冗长。
另一个选择是创建自己的TypeConverter
可以从逗号分隔的列表转换为数组:
class ArrayTypeConverter : TypeConverter
{
public override object ConvertFrom(
ITypeDescriptorContext context, CultureInfo culture, object value)
{
string list = value as string;
if (list != null)
return list.Split(',');
return base.ConvertFrom(context, culture, value);
}
public override bool CanConvertFrom(
ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
return true;
return base.CanConvertFrom(context, sourceType);
}
}
如果你转换到了你的类型的类型,你可以再申请the [TypeConverter]
attribute到那种类型。但既然你想转换为string[]
,你不能那样做。所以,你必须该属性适用于那些要使用该转换器的所有属性:
[TypeConverter(typeof(ArrayTypeConverter))]
public string[] PropName { get; set; }
的想法是在资源定义自定义值数组控制/窗口,然后只用绑定到一个静态资源:
<!-- or Window.Resources -->
<UserControl.Resources>
<x:Array x:Key="CustomValues"
Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Val1</sys:String>
<sys:String>Val2</sys:String>
</x:Array>
</UserControl.Resources>
<!-- Then just bind -->
<ns:SomeControl PropName="{Binding Source={StaticResource CustomValues}}" />
sll's answer是伟大的,但你可以避开资源,如果你想和值直接写入控制:
<ns:SomeControl>
<ns:SomeControl.PropName>
<x:Array Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Val1</sys:String>
<sys:String>Val2</sys:String>
</x:Array>
</ns:SomeControl.PropName>
</ns:SomeControl>
此外,您可以将xmlns:
声明移动到head元素(Window,UserControl等)中,因此您不会使用它控制属性。如果你是一个正在开发SomeControl
,我会使用svick's approach并提供一个TypeConverter。
为什么绑定到'StaticResource'?为什么资源? – Snowbear
+1,这是在编译时知道值的方法。现在,如果他需要动态值(运行时值,绑定等),他将需要一个返回数组的I(多)ValueConverter。 –
@Snowbear:这就是我现在所知道的,我将不胜感激任何更高级的解决方案,为什么你删除了你的答案并且没有提供答案?真的我没有其他想法如何做到这一点,所以将+1,如果你显示其他方式,在此先感谢 – sll