Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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
C# 值转换器与附加属性_C#_.net_Xaml - Fatal编程技术网

C# 值转换器与附加属性

C# 值转换器与附加属性,c#,.net,xaml,C#,.net,Xaml,在xaml中使用bool-to-visibility转换器时,我发现这个问题很有趣。什么能更好地完成这项工作:值转换器还是附加属性 使用从布尔值到可见性的值转换器: Visibility="{Binding IsCommentPreviewVisible,Converter={StaticResource myBoolToVisibilityConverter}}" 或使用附加属性: ap:BoolVisibility.Visible="{Binding IsCommentPreviewVi

在xaml中使用bool-to-visibility转换器时,我发现这个问题很有趣。什么能更好地完成这项工作:值转换器还是附加属性

使用从布尔值到可见性的值转换器:

Visibility="{Binding IsCommentPreviewVisible,Converter={StaticResource myBoolToVisibilityConverter}}" 
或使用附加属性:

ap:BoolVisibility.Visible="{Binding IsCommentPreviewVisible}"

其中
VisibleChanged
内部处理
FrameworkElement
Visibility

当您需要为定义类以外的类设置属性时,自定义附加属性通常非常适合

Canvas.Left
Canvas.Top
Canvas.Right
Canvas.Bottom
为例,这些属性用于要使用的父元素,而不是专门用于定义元素。您可以使用
Canvas.
附加属性来定义元素在另一个元素(a
Canvas
)中的位置

这本书也许值得一读

另一方面,转换器为您提供了非常简单的方法,在UI上将一种数据类型转换为另一种数据类型。也就是说,您仍然可以使用附加属性来模拟转换器的行为

如果您需要执行任何区域性感知操作,则
IValueConverter
内置了此属性,而附加属性则没有。见


我个人倾向于避开附加属性,除非我需要附加父类需要使用的属性。很难提供真实的示例,因为我很少使用它们(如果有的话)。

请注意,附加属性只起作用,因为可见性在类图中定义得非常高。例如,考虑具有标签可见性的控件。有多少附加属性是可维护的?当然可以,但一般来说,在性能/内存/调用次数等方面,什么会更快/更好?不太可能产生任何明显的差异。我会考虑这纯粹是可读性和可维护性。@ CURA7or如果执行得当,你可以使它们大致相同的速度。然而,我会选择第二个,因为它更容易阅读。