Невозможно установить значение DependencyProperty через стиль - PullRequest
0 голосов
/ 02 апреля 2012

Эксперты,

Я написал пользовательскую форму под названием "DimensionLine", которую я использую в различных местах моего пользовательского интерфейса.Форма состоит из линии со стрелкой на каждом конце.Он работает нормально, но одно из свойств зависимости не может быть установлено с помощью стиля, и я просто не могу понять, что я сделал неправильно.

Это части кода, которые не будут работать должным образом:

public class DimensionLine : Shape
{
    public static readonly DependencyProperty ArrowsSizeProperty =
        DependencyProperty.Register("ArrowsSize", typeof(Size), typeof(DimensionLine),
            new FrameworkPropertyMetadata(new Size(10, 10),
                FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure, 
                debug)); <-- I added this to listen for changes to the property ...

    private static void debug(DependencyObject dObj, DependencyPropertyChangedEventArgs e)
    {
       // ERROR! this code never receives value from the Style. Why?
    }

    public Size ArrowsSize
    {
        get { return (Size) GetValue(ArrowsSizeProperty); }
        set { SetValue(ArrowsSizeProperty, value); }
    }
}

XAML:

<MyXaml.Resources>
    <Style x:Key="SmallDimensionLine" TargetType="{x:Type cc:DimensionLine}" BasedOn="{StaticResource DimensionLine}">
        <Setter Property="ArrowsSize" Value="4,1.5" />
    </Style>   
</MyXaml.Resources>

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

Есть ли что-то еще, что нужно сделать, чтобы d-свойство соответствовало стилям?

Спасибо

1 Ответ

1 голос
/ 02 апреля 2012

Вам не хватает статического конструктора, который обычно добавляется автоматически при создании нового пользовательского элемента управления WPF

static DimensionLine ()
{
    DefaultStyleKeyProperty.OverrideMetadata(typeof(DimensionLine ),
        new FrameworkPropertyMetadata(typeof(DimensionLine )));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...