Как добавить DependencyProperty для кнопки?
Я просто пытаюсь добавить пару свойств к кнопке, чтобы сохранить дополнительную информацию для последующего использования. Мой выбор сделать это вместо создания UserControl, основанного на кнопке, был сделан исключительно потому, что он казался меньше кода.
Я следовал примерам, которые я видел на сайте Microsoft, и получаю сообщение об ошибке "Невозможно установить" Binding "в свойстве" SetSortIndicatorVisibility "типа" Button "." Binding "можно установить только в DependencyProperty объекта DependencyObject. " Это не имеет смысла, потому что Button является DependencyObject, и я добавляю DependencyProperty. Сначала я начал с AttachedProperty, но с тех пор исправил это. Я даже взял весь свой код, связанный с этим, и поместил его в тестовый проект, и я все еще получаю эту ошибку. Весь этот тестовый код ниже:
Определение DependencyProperty:
public static readonly DependencyProperty SortIndicatorVisibilityProperty = DependencyProperty.Register( "SortIndicatorVisibility", typeof( Visibility ), typeof( Button ), new FrameworkPropertyMetadata( Visibility.Visible, FrameworkPropertyMetadataOptions.AffectsRender ) );
public static void SetSortIndicatorVisibility( Button button, Visibility value )
{
button.SetValue( SortIndicatorVisibilityProperty, value );
}
public static Visibility GetSortIndicatorVisibility( Button button )
{
return ( Visibility ) button.GetValue( SortIndicatorVisibilityProperty );
}
Окно XAML, содержащее кнопку с новым свойством и привязку:
<Window x:Class="Testing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ext="clr-namespace:Testing"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Test"
Command="{Binding TestCommand}"
ext:Class1.SortIndicatorVisibility="{Binding SortIndicatorVisibilitySiteName}" />
</Grid>
Наконец, свойство DependencyProperty связано с:
public Visibility SortIndicatorVisibilitySiteName
{
get
{
return Visibility.Visible;
}
}
2 ответа
Вы не можете добавить "нормальное" свойство зависимости к произвольному классу, это должно быть присоединенное свойство. Кроме того, тип владельца не должен быть Button
, это должен быть класс, который объявляет свойство
Я думаю, что ваша первая попытка с присоединенным свойством Dependency была правильной, потому что ваши методы получения и установки не согласованы сейчас.
Ваше свойство фактически зарегистрировано как свойство зависимости вместо присоединенного свойства зависимости (которое использует "RegisterAttached" вместо "Register").