Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中TypeConverter和MarkupExtension之间的区别是什么_Wpf_Xaml - Fatal编程技术网

WPF中TypeConverter和MarkupExtension之间的区别是什么

WPF中TypeConverter和MarkupExtension之间的区别是什么,wpf,xaml,Wpf,Xaml,TypeConverters和MarkupExtension之间有什么区别?TypeConverters用于将一种类型隐式转换为另一种类型。例如,可以将字符串“Red”转换为SolidColorBrush,其颜色属性设置为红色。在这种情况下: <Button Background="Red" /> MarkupExtension允许您为属性提供更多自定义值。还有一些特殊的标记扩展、绑定、多重绑定和DynamicSource。它们不仅仅提供静态值,而是提供更动态的值 因此,您可以

TypeConverters
MarkupExtension
之间有什么区别?

TypeConverters用于将一种类型隐式转换为另一种类型。例如,可以将字符串“Red”转换为SolidColorBrush,其颜色属性设置为红色。在这种情况下:

<Button Background="Red" />

MarkupExtension允许您为属性提供更多自定义值。还有一些特殊的标记扩展、绑定、多重绑定和DynamicSource。它们不仅仅提供静态值,而是提供更动态的值


因此,您可以构建执行与类型转换器相同操作的标记扩展,但是您必须显式使用它们,而不是类型转换器的隐式性质。

ATypeConverter旨在从一种类型转换为另一种类型。有几种现成的转换器,如BrushConverter、ColorConverter、BooleanConverter等。有关完整列表,请参阅。类型转换器的优点在于,它们可以通过在类定义中使用以下ATAttribute定义应用于属性定义

[TypeConverterAttribute(typeof(BrushConverter)]
public Brush Background
{
   ...
}
…BrushConverter的实现知道,如果它接收到字符串作为输入,它应该尝试将其转换为已知的颜色SolidBrush实例。这意味着您的XAML不需要为属性指定实际的solidBrush.Red引用,而是使用一个简单的字符串

<Button Background="Red" />

…这样写和理解起来要快得多。但是,TypeConverter总是为属性分配调用,并且不能阻止XAML导致调用TypeConverter

标记扩展名用于返回一个对象,然后将该对象指定给指定的属性。这是更灵活的,因为您可以决定何时何地使用MarkupExtension,并且不受预先使用属性标记的特定属性的限制。标记扩展的示例有绑定、StaticResource和DynamicSource

因此,类型转换器适用于特定类型的特定属性,您希望接受比类型本身定义的更大范围的值。标记扩展非常适合于开发人员决定何时何地使用它的更通用的用途