Привязка к углу поворота в DataTemplate не вступает в силу - PullRequest
1 голос
/ 26 сентября 2011

В моем 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 ]

3 голосов
/ 26 сентября 2011

Я воссоздал аналогичную настройку, как у вас, и у меня она тоже не сработала. Любопытно, что нет никаких ошибок связывания. Я сделал привязку к родственникам, и это не сработало.

Хотя, если я свяжу подсказку

  <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 ???

2 голосов
/ 04 марта 2016

Вам нужно привязать угол так:

<RotateTransform Angle="{Binding Path=FontSize, RelativeSource={RelativeSource TemplatedParent}}"/>

Источник

2 голосов
/ 26 сентября 2011

Правильно ли DataContext? Если это вращение является частью Content, с которым вы связаны ранее, вам нужно либо изменить DataContext, либо добавить его к пути привязки вращения, то есть сделать его {Binding Content.XAxisLabelRotation}.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...