Привязка к углу поворота в DataTemplate не вступает в силу
В моем 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, это не так.
Может кто-нибудь, пожалуйста, помогите?
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???
Вам нужно привязать угол так:
<RotateTransform Angle="{Binding Path=FontSize, RelativeSource={RelativeSource TemplatedParent}}"/>
Это DataContext
правильный? Если это вращение является частью Content
вы связаны с ранее, вам нужно либо изменить DataContext
или добавить это к пути привязки вращения, т.е. сделать его {Binding Content.XAxisLabelRotation}
,
Вы знаете, как отлаживать привязки? Поскольку вы не представили никаких ошибок связывания, я бы предположил, что это не так, поэтому, если это так, пожалуйста, прочитайте эту статью и убедитесь, что вы предоставляете ошибки, если не сможете отладить привязку самостоятельно в будущем.