绑定到工具提示的wpf自定义控件依赖项属性?
我有一个我在WPF中编写的自定义控件,它有一个布尔依赖属性:
public static readonly DependencyProperty IsAlertProperty = DependencyProperty.Register("IsAlert", typeof(bool), typeof(AlertControl), new FrameworkPropertyMetadata(default(bool), FrameworkPropertyMetadataOptions.None, OnIsAlertChanged, null, false, UpdateSourceTrigger.PropertyChanged)); public bool IsAlert { get { return (bool)GetValue(IsAlertProperty); } set { SetValue(IsAlertProperty, value); } }
在我的Generic.xaml中,我有以下xaml代码:
...
问题是这似乎不起作用。 我使用Snoop监视我的xaml,并且IsAlert
属性正在适当地改变,但是如果我深入研究我的AlertControl.ToolTip
,我看到Visiblity
DependencyProperty有一个绑定错误。 我也尝试使用RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:AlertControl}}
,但这也给出了绑定问题。 我不知道如何诊断这个,因为我的输出窗口也没有吐出任何绑定表达式错误。
说到WPF ToolTip
,你必须明白它不是VisualTree的一部分,就像其他控件一样。 只有当你的鼠标hover在控件上时,它才会发挥作用。 此时,WPF将创建ToolTip
,但它不会将其作为AlertControl
的子元素AlertControl
,这就是为什么RelativeSourceMode
( TemplatedParent
和FindAncestor
)都不起作用的原因。
但是有一个保存优雅,那就是ToolTip.PlacementTarget
属性。
...
你在这里做的是告诉WPF BindingExtension
绑定到名为PlacementTarget
的属性(恰好是创建ToolTip
的UIElement
,在你的情况下是AlertControl
),并且你正在声明从ToolTip
本身找到这个属性(不是ToolTip
的DataContext
)。 除此之外,您还计划使用IValueConverter
。 此外,完全未解析的PropertyInfo
不仅在ToolTip
上查找PlacementTarget
,还检查从PlacementTarget
返回的对象是否可以作为一种AlertControl
,然后访问其IsAlert
CLR属性。 我可以很容易地完成Path=PlacementTarget.IsAlert
并且通过reflection,它可以很好地解决,但我更喜欢明确声明应该从一种AlertControl
访问IsAlert属性。
您是否还将变量添加到代码隐藏中?
喜欢:
public bool IsAlert { get { return (bool)GetValue(IsAlertProperty); } set { SetValue(IsAlertProperty, value); } }
使用它应该允许您绑定它而不需要任何分层信息。 顺便说一句,您可以通过在转换器中设置断点来轻松检查绑定是否正常。
编写CustomControl
与创建基本UserControl
。 首先,您没有自己的XAML文件来定义控件…您必须共享generic.xaml
文件。 在数据绑定或事件处理方面,这通常会导致新的开发人员出现问题。 但是,解决方案很简单。
您需要做的就是使用RelativeSource Binding
,而不是TemplatedParent
,而是使用您的控件的属性。 试试这个:
上述就是C#学习教程:绑定到工具提示的wpf自定义控件依赖项属性?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/936347.html