在我的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}"/>
问题在于,当我使用Angle的未绑定值并将其硬编码为-90时,它可以很好地工作,当我尝试使用XAxisLabelRotation的绑定值时,它不会。
有人可以帮忙吗?
答案 0 :(得分:3)
我重新创建了与你类似的设置,但它对我也没有用。奇怪的是没有绑定错误。我也做了亲戚绑定,但它没有用。
虽然如果我绑定工具提示
<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无法解释的世界???
答案 1 :(得分:2)
DataContext
是否正确?如果此旋转是您之前绑定的Content
的一部分,则需要更改DataContext
或将其添加到旋转的绑定路径,即将其设为{Binding Content.XAxisLabelRotation}
。
你知道如何调试绑定吗?由于您没有提出任何绑定错误,我认为您没有,所以如果是这种情况,请阅读this article并确保如果您将来无法自行调试绑定,则确实提供了错误。
答案 2 :(得分:2)
你需要像这样绑定角度:
<RotateTransform Angle="{Binding Path=FontSize, RelativeSource={RelativeSource TemplatedParent}}"/>