2013-10-08 4 views
2

У меня есть UserControl с границей, цвет границы должен быть задан с помощью свойства Dependency. Я также хочу оживить непрозрачность границы. Мой текущий код XAML выглядит следующим образом:Не удается разрешить все ссылки на свойства в пути свойств

<Border BorderBrush="{Binding ElementName=ImageViewerUserControl, 
    Path=NotificationColor}" BorderThickness="3" x:Name="AnimatedBorderBrush" 
    Visibility="{Binding ElementName=ImageViewerUserControl, 
    Path=ShowSequenceErrorNotification, Converter={StaticResource boolToVisibility}}"> 
    <Border.Triggers> 
     <EventTrigger RoutedEvent="Border.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush" 
         Storyboard.TargetProperty="BorderBrush.Opacity" 
         RepeatBehavior="Forever" 
         AutoReverse="True" 
         From="1" 
         To="0.0" 
         Duration="0:0:1"/> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Border.Triggers> 
</Border> 

Это дает только сообщение об ошибке:

Cannot resolve all property references in the property path 'BorderBrush.Opacity'. Verify that applicable objects support the properties.

Но если я изменяю цвет BorderBrush к, позволяет сказать Black это работает. Как это можно достичь? Я хочу установить цвет кисти моей границы через свойство зависимости. И да, свойство зависимостей является Brush

+1

Вы установили кисть по умолчанию для вашего DependencyProperty? Если значение по умолчанию не равно null и приведет к такой ошибке. – LPL

+0

@LPL Как я могу это достичь? –

ответ

2

Я думаю, что проблема здесь в том, что анимация будет работать только тогда, когда есть объект (Brush) для анимации. Если вы зарегистрируете свой DependencyProperty без значения по умолчанию, по умолчанию оно равно null. Пожалуйста, попробуйте регистрации DP со значением по умолчанию

public static readonly DependencyProperty NotificationColorProperty = DependencyProperty.Register(
    "NotificationColor", 
    typeof(Brush), 
    typeof(ImageViewerUserControl), 
    new PropertyMetadata(Brushes.Transparent) 
); 

Edit:

И как говорит @Sheridan использовать Storyboard.TargetProperty="Opacity" вместо Border.Opacity. Хотя это работает, если вы укажете прямой BorderBrush, это не сработало для меня с ограниченным DP.

+0

Звучит как решение, но: Я получаю это сообщение об ошибке: Тип значения по умолчанию не соответствует типу свойства «NotificationColor». –

+0

И какой тип NotificationColor? Кисть или цвет? – LPL

+0

Спасибо за ваш ввод, но во время выполнения появляется такое же сообщение об ошибке. Свойство - Brush. –

1

Ваше AnimatedBorderBrush название вводит в заблуждение, поскольку это относится к Border и неBorderBrush. Если вы хотите, чтобы оживить Border.Opacity, а затем использовать Border.Opacity в DoubleAnimation вместо BorderBrush.Opacity:

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush" 
    Storyboard.TargetProperty="Border.Opacity" 
    RepeatBehavior="Forever" 
    AutoReverse="True" 
    From="1" 
    To="0.0" 
    Duration="0:0:1" /> 

UPDATE >>>

Ahhhhh, мой плохой ... Как анимация определяется внутри Border, там нет необходимости ссылаться на него, просто использовать Opacity:

<DoubleAnimation Storyboard.TargetName="AnimatedBorderBrush" 
    Storyboard.TargetProperty="Opacity" 
    RepeatBehavior="Forever" 
    AutoReverse="True" 
    From="1" 
    To="0.0" 
    Duration="0:0:1" /> 
+0

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

+0

Ваш ответ был прав, но проблема в том, что парень здесь также «исправил» мою проблему ... Спасибо большое! –

+1

Не проблема вообще. – Sheridan

Смежные вопросы