如果 xaml 中使用 bool 到可见性转换器的行很长,我觉得这个问题很有趣。什么能更好地完成这项工作:值(value)转换器或附属属性(property)?
使用从 bool 到 Visibility 的值转换器:
Visibility="{Binding IsCommentPreviewVisible,Converter={StaticResource myBoolToVisibilityConverter}}"
或使用附加属性:
ap:BoolVisibility.Visible="{Binding IsCommentPreviewVisible}"
其中 VisibleChanged
在内部处理 FrameworkElement
的 Visibility
。
最佳答案
自定义附加属性通常适用于需要为定义类以外的类设置属性的情况。
以Canvas.Left
、Canvas.Top
、Canvas.Right
、Canvas.Bottom
为例,这些属性供 parent 元素使用,而不是专门用于定义元素。您可以使用 Canvas.
附加属性来定义元素在 另一个元素(Canvas
)中的定位。
可能值得一读 documentation .
另一方面,转换器为您提供了一种非常简单的方法,可以在 UI 上将一种数据类型转换为另一种数据类型。也就是说,您仍然可以使用附加属性 来模仿转换器的行为。
如果您需要做任何文化意识,那么IValueConverter
内置了它,附加属性则没有。查看documentation
我个人倾向于避开附加属性,除非我需要附加父类需要使用的属性。很难提供一个真实的例子,因为我很少使用它们。
关于c# - 值转换器与附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645553/