c# - 值转换器与附加属性

标签 c# .net xaml

如果 xaml 中使用 bool 到可见性转换器的行很长,我觉得这个问题很有趣。什么能更好地完成这项工作:值(value)转换器或附属属性(property)?

使用从 bool 到 Visibility 的值转换器:

Visibility="{Binding IsCommentPreviewVisible,Converter={StaticResource myBoolToVisibilityConverter}}" 

或使用附加属性:

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

其中 VisibleChanged 在内部处理 FrameworkElementVisibility

最佳答案

自定义附加属性通常适用于需要为定义类以外的类设置属性的情况。

Canvas.LeftCanvas.TopCanvas.RightCanvas.Bottom为例,这些属性供 parent 元素使用,而不是专门用于定义元素。您可以使用 Canvas. 附加属性来定义元素在 另一个元素(Canvas)中的定位。

可能值得一读 documentation .

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

如果您需要做任何文化意识,那么IValueConverter 内置了它,附加属性则没有。查看documentation

我个人倾向于避开附加属性,除非我需要附加父类需要使用的属性。很难提供一个真实的例子,因为我很少使用它们。

关于c# - 值转换器与附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645553/

相关文章:

wpf - C+Ctrl KeyBinding 不会导致复制发生

c# - 间接引用声明具有类型限制的泛型扩展方法的程序集时出现奇怪的编译错误

c# - TimeSpan 刻度在保存后获得 +1

c# - XSS 是否可以通过 MailAddress 类实现?

c# - 为什么 this.close() 关闭应用程序

c# - 检查斜杠的字符串

windows-phone-7 - 绑定(bind)到复选框集合

c# - WPF路径碰撞检测?

c# - 有没有一种简单的方法来检查多个列以查看值是否为空?

.net - SAP RFC SDK 的 future