Привязка к углу поворота в 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},

Вы знаете, как отлаживать привязки? Поскольку вы не представили никаких ошибок связывания, я бы предположил, что это не так, поэтому, если это так, пожалуйста, прочитайте эту статью и убедитесь, что вы предоставляете ошибки, если не сможете отладить привязку самостоятельно в будущем.

Другие вопросы по тегам