【发布时间】:2016-08-09 07:42:18
【问题描述】:
我有一个带有 Angle DependencyProperty 的自定义按钮:
public static readonly DependencyProperty AngleProperty = DependencyProperty.Register(
"Angle",
typeof(float),
typeof(TriangularButton),
new FrameworkPropertyMetadata(0f, FrameworkPropertyMetadataOptions.AffectsRender));
public float Angle
{
get { return (float)GetValue(AngleProperty); }
set { SetValue(AngleProperty, value); }
}
在 ControlTemplate 中,我想绑定到 Angle。我尝试了几种方法(见下文),每种方法都有效,但我得到了 System.Windows.Data 错误。我该如何摆脱它?
我尝试了什么:
<Button.Template>
<ControlTemplate TargetType="Button">
<Path ...>
<Path.RenderTransform>
<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource TemplatedParent}}"/>
</Path.RenderTransform>
</Path>
</ControlTemplate>
</Button.Template>
然后我得到:
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定表达式:路径=角度;数据项=空;目标元素是 'RotateTransform' (HashCode=55197304);目标属性是“角度”(类型“双”)
当我这样做时:
<Button.Template>
<ControlTemplate TargetType="Button">
<Path ...>
<Path.RenderTransform>
<RotateTransform Angle="{Binding Angle, RelativeSource={RelativeSource AncestorType=Button}}"/>
</Path.RenderTransform>
</Path>
</ControlTemplate>
</Button.Template>
然后我得到:
System.Windows.Data 错误:4:无法通过引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.Button',AncestorLevel='1'”找到绑定源。绑定表达式:路径=角度;数据项=空;目标元素是 'RotateTransform' (HashCode=24935945);目标属性是“角度”(类型“双”)
编辑:
感谢this answer 我发现原因可能是因为按钮最初不可见。如果我将按钮放在最初可见的地方,错误就会消失。当我在最初不可见的地方使用按钮时,有没有办法摆脱错误?
【问题讨论】:
标签: c# wpf data-binding dependency-properties