Как добавить DependencyProperty для кнопки? - PullRequest
5 голосов
/ 15 января 2011

Я просто пытаюсь добавить пару свойств к кнопке, чтобы сохранить некоторую дополнительную информацию для последующего использования. Я решил сделать это вместо создания UserControl на основе Button исключительно потому, что казалось, что кода меньше.

Я следовал примерам, которые я видел на сайте Microsoft, и получаю сообщение об ошибке «Невозможно установить« Binding »в свойстве« SetSortIndicatorVisibility »типа« Button ».« Binding »может быть только установлен на DependencyProperty объекта DependencyObject. " Это не имеет смысла, потому что Button является DependencyObject и я добавляю DependencyProperty. Я изначально начал с AttachedProperty, но с тех пор я это исправил. Я даже взял весь свой код, связанный с этим, и поместил его в тестовый проект, и я все еще получаю эту ошибку Весь этот тестовый код ниже:

Определение зависимости:

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 ]

5 голосов
/ 16 января 2011

Нельзя добавить «нормальное» свойство зависимости к произвольному классу, оно должно быть присоединенным свойством.Кроме того, тип владельца не должен быть Button, это должен быть класс, который объявляет свойство

0 голосов
/ 16 января 2011

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

Ваше свойство фактически зарегистрировано как свойство зависимости вместо присоединенного свойства зависимости (которое использует «RegisterAttached» вместо «Register»).

...