Ответ 1
найдено неоднозначное соответствие.
... обычно выбрасывается GetMethod
, если есть несколько перегрузок и не указана подпись типа (MSDN: More than one method is found with the specified name.
). В принципе, WPF-движок ищет только один такой метод.
Почему бы не проверить тип в теле метода и выбросить InvalidOperationException
, если это не разрешено?
Обратите внимание, однако, что те CLR-Wrappers не должны включать любой код рядом с настройкой и получением, если свойство установлено в XAML , они будут игнорироваться, попробуйте бросить исключение в установщике, оно не появится, если вы используете XAML для установки значения.
Вместо этого используйте обратный вызов:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached
(
"MyProperty",
typeof(object),
typeof(ThisStaticWrapperClass),
new UIPropertyMetadata(null, MyPropertyChanged) // <- This
);
public static void MyPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
if (o is TextBox == false && o is ComboBox == false)
{
throw new InvalidOperationException("This property may only be set on TextBoxes and ComboBoxes.");
}
}