2016-11-17 1 views
1

Вы видите, что, возможно, я делаю неправильно? Это мой первый раз, когда я пытаюсь использовать прикрепленные свойства и не уверен в ограничениях.Триггер на прикрепленном свойстве в стиле границы. Ошибка: Ошибка инициализации типа

Вот мой класс для объявления вложенного свойства:

public class ControllerAttachedProp : DependencyObject 
{ 

    public static readonly DependencyProperty ControllerStatusProperty = DependencyProperty.RegisterAttached(
     "ControllerStatus", typeof(string), typeof(ControllerAttachedProp), new PropertyMetadata(false)); 

    public static void SetControllerStatus(DependencyObject target, string value) 
    { 
     target.SetValue(ControllerStatusProperty, value); 
    } 

    public static string GetControllerStatus(DependencyObject target) 
    { 
     return (string)target.GetValue(ControllerStatusProperty); 
    } 

} 

Вот мой стиль. Я получаю синюю загогулину под недвижимостью = «...», который говорит „инициализационный Type„ControllerAttachProp“не удался: Тип инициализатор„“ControllerAttachedProp бросил исключение“

<Style x:Key="ForegroundUpdater" TargetType="{x:Type Border}" BasedOn="{StaticResource GreenSquare}"> 
    <Style.Triggers> 
     <Trigger Property="rm:ControllerAttachedProp.ControllerStatus" Value="Paused"> 
      <Setter Property="Background" Value="{StaticResource BlueIsPaused}" /> 
     </Trigger> 
     <Trigger Property="rm:ControllerAttachedProp.ControllerStatus" Value="Disconnected"> 
      <Setter Property="Background" Value="{StaticResource RedIsBad}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Это, как я пытаюсь использовать его в моем UserControl:

<Border rm:ControllerAttachedProp.ControllerStatus="{Binding    
    SomePropertyInViewModel}" Style="{DynamicResource ForegroundUpdater}"> 
    ... 
    </Border> 

ответ

2

Когда вы определяете ваше свойство зависимостей, вы заявляете, что это типа string, но метаданные по умолчанию вы предоставляете определяют, false в качестве значения по умолчанию (new PropertyMetadata(false)), который имеет тип bool, отсюда ошибка. Вы должны указать значение строки в качестве значения по умолчанию:

public static readonly DependencyProperty ControllerStatusProperty = 
    DependencyProperty.RegisterAttached(
     "ControllerStatus", 
     typeof(string), 
     typeof(ControllerAttachedProp), 
     new PropertyMetadata(string.Empty)); 

Или не указать значение по умолчанию какой-либо все, в этом случае по умолчанию будет null:

public static readonly DependencyProperty ControllerStatusProperty = 
    DependencyProperty.RegisterAttached(
     "ControllerStatus", 
     typeof(string), 
     typeof(ControllerAttachedProp)); 
+0

Ты самый лучший! Спасибо! Спасибо! – azulBonnet

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