DataTemplate中RotateTransform Angle的绑定没有生效
本文关键字:绑定 RotateTransform Angle DataTemplate | 更新日期: 2023-09-27 18:09:41
在我的WPF UserControl中我有这个资源,请观察Xml示例中的注释。
<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>
在代码中,我有一个依赖属性定义如下:
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被分配给一个元素,如下所示:
<chart:AxisLabel ElementTemplate="{StaticResource AxisXLabelTemplate}"/>
问题是,当我使用角度的未绑定值并硬编码为-90时,它工作得很好,而当我尝试将绑定值绑定到XAxisLabelRotation时,它没有。
有人能帮忙吗?
我重新创建了与您类似的设置,它也不适合我。奇怪的是没有绑定错误。我也做了相对资源绑定,但是没有成功。
虽然如果我绑定tooltip
<ContentPresenter ToolTip="{Binding XAxisLabelRotation,
RelativeSource={RelativeSource
AncestorType={x:Type ContentControl}},
UpdateSourceTrigger=PropertyChanged}" ..>
向我显示工具提示。所以我改变了旋转变换
<RotateTransform Angle="{Binding XAxisLabelRotation,
RelativeSource={RelativeSource
AncestorType={x:Type ContentControl}},
UpdateSourceTrigger=PropertyChanged}" ..>
但是变换仍然不起作用。仍然没有绑定错误。
然后我引入了一个假转换器…
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世界??
你需要像这样绑定角度:
<RotateTransform Angle="{Binding Path=FontSize, RelativeSource={RelativeSource TemplatedParent}}"/>
源DataContext
是否正确?如果这个旋转是你之前绑定的Content
的一部分,你要么需要改变DataContext
,要么将其添加到旋转的绑定路径中,即使其成为{Binding Content.XAxisLabelRotation}
。
你知道如何调试绑定吗?由于您没有出现任何绑定错误,我认为您没有,所以如果是这种情况,请阅读本文,并确保在将来无法自己调试绑定时提供错误。