Свойство зависимости WPF падает в графическом интерфейсе с использованием моего интерфейса - PullRequest
2 голосов
/ 26 апреля 2011

Мой UserControl работает нормально.Сегодня я добавил простой интерфейс в usercontrol.Теперь я могу загрузить его в режиме разработки (XAML), но при использовании UserControl в новом Window1.Xaml происходит сбой.Любая идея?

'Вызов конструктора для типа' OUTPUT ___ WPF01.ucUpDownBox ', который соответствует указанным ограничениям связывания, вызвал исключение.

''' <summary>
''' BorderColor Dependency Property
''' </summary>
Public Shared ReadOnly BorderColorProperty As DependencyProperty = _
    DependencyProperty.Register("BorderColor", GetType(System.Windows.Media.Color), GetType(ucUpDownBox), _
        New FrameworkPropertyMetadata(System.Windows.Media.Color.FromArgb(255, 50, 50, 50), _
            FrameworkPropertyMetadataOptions.None, _
            AddressOf OnBorderColorChanged))

''' <summary>
''' Gets or sets the BorderColor property.  This dependency property 
''' indicates ....
''' </summary>
Public Property BorderColor() As System.Windows.Media.Color Implements IButton.Color '<--- IButton.Color is the interface with Media.Color
    Get
        Return CType(GetValue(BorderColorProperty), System.Windows.Media.Color)
    End Get
    Set(ByVal value As System.Windows.Media.Color)
        SetValue(BorderColorProperty, value)
    End Set
End Property

''' <summary>
''' Handles changes to the BorderColor property.
''' </summary>
Private Overloads Shared Sub OnBorderColorChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
    Dim target As ucUpDownBox = CType(d, ucUpDownBox)
    Dim oldBorderColor As System.Windows.Media.Color = CType(e.OldValue, System.Windows.Media.Color)
    Dim newBorderColor As System.Windows.Media.Color = target.BorderColor
    target.OnBorderColorChanged(oldBorderColor, newBorderColor)
End Sub

''' <summary>
''' Provides derived classes an opportunity to handle changes to the BorderColor property.
''' </summary>
Protected Overridable Overloads Sub OnBorderColorChanged(ByVal oldBorderColor As System.Windows.Media.Color, ByVal newBorderColor As System.Windows.Media.Color)
    Dim uc As ucUpDownBox = CType(Me, ucUpDownBox)

    uc.Col1A.Color = AddLuminance(BorderColor, 60)
    uc.Col1B.Color = AddLuminance(BorderColor, -60)
End Sub

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

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

например. 0 вместо 0,0 для двойного или Цвет вместо кисти.

Также может быть вызвано использованием не назначенного (нулевого) свойства в конструкторе.

1 голос
/ 27 апреля 2011

"Вызов конструктора для типа ..., который соответствует указанным ограничениям привязки, вызвал исключение"

Эта ошибка обычно означает, что при синтаксическом анализе кода xaml произошла ошибка во время выполнения.Что, конечно, мало что говорит.Так что вам нужно получить больше информации.По сути, исключение, которое вы видите, это просто общая ошибка, мы хотим посмотреть, что приводит к этой проблеме.

Чтобы получить реальное исключение (или то, что мы называем «внутренним исключением»): - активируйтеотлов всех исключений, генерируемых в Visual Studio.Откройте Отладка> Исключения и установите флажок в «брошенном» столбце для «Общих исключений времени выполнения» .

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

Если вы все еще застряли, опубликуйте некоторый код и трассировку стека в своем вопросе, и мы посмотрим, что мы можемсделайте оттуда.

Иногда в окне «Вывод» можно также получить некоторую информацию.

...