Binding on RotateTransform Angle in DataTemplate not taking effect
在我的 WPF 用户控件中,我有这个资源,请注意 Xml 示例中的注释。
1 2 3 4 5 6 7 8 9 10 | <UserControl.Resources> <DataTemplate x:Key="AxisXLabelTemplate"> <ContentPresenter Content="{Binding Path=Content}"> <ContentPresenter.LayoutTransform> <RotateTransform Angle="{Binding XAxisLabelRotation, UpdateSourceTrigger=PropertyChanged}" /> <!-- This does not work --> <!-- <RotateTransform Angle="-90" /> This works --> </ContentPresenter.LayoutTransform> </ContentPresenter> </DataTemplate> </UserControl.Resources> |
在代码中,我有一个定义如下的依赖属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class MyChart: INotifyPropertyChanged { public static readonly DependencyProperty XAxisLabelRotationProperty = DependencyProperty.Register("XAxisLabelRotation", typeof(RotateTransform), typeof(BarChart), new FrameworkPropertyMetadata((RotateTransform)new RotateTransform(-90.0))); public RotateTransform XAxisLabelRotation { get { return (RotateTransform)GetValue(XAxisLabelRotationProperty); } set { SetValue(XAxisLabelRotationProperty, value); } } ... } |
AxisXLabelTemplate DataTemplate 被分配给更下方的元素,如下所示:
1 | <chart:AxisLabel ElementTemplate="{StaticResource AxisXLabelTemplate}"/> |
问题是,当我使用 Angle 的未绑定值并将其硬编码为 -90 时,它工作得很好,而当我尝试使用 XAxisLabelRotation 的绑定值时却没有。
有人可以帮忙吗?
我重新创建了与您类似的设置,但它对我也不起作用。奇怪的是没有绑定错误。我也做了相对源绑定,但它没有工作。
虽然如果我绑定工具提示
1 2 3 4 | <ContentPresenter ToolTip="{Binding XAxisLabelRotation, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, UpdateSourceTrigger=PropertyChanged}" ..> |
向我显示工具提示。所以我改变了旋转变换,
1 2 3 4 | <RotateTransform Angle="{Binding XAxisLabelRotation, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, UpdateSourceTrigger=PropertyChanged}" ..> |
但转换仍然不起作用。仍然没有绑定错误。
然后我介绍了一个虚拟转换器...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class AngleConverter : IValueConverter { public object Convert(...) { return value; } .... } <RotateTransform Angle="{Binding XAxisLabelRotation, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource AngleConverter}}" ..> |
而且效果非常好!!!
无法解释的 WPF 世界???
你需要像这样绑定angular:
1 | <RotateTransform Angle="{Binding Path=FontSize, RelativeSource={RelativeSource TemplatedParent}}"/> |
来源
你知道如何调试绑定吗?由于您没有出现任何绑定错误,我假设您没有,所以如果是这种情况,请阅读这篇文章并确保如果您将来无法自己调试绑定,您确实提供了错误。