如何将DependencyProperty添加到Button?

时间:2011-01-15 20:55:37

标签: wpf binding dependency-properties

我基本上只是尝试将一些属性添加到按钮中以存储稍后要使用的一些额外信息。我选择这样做而不是基于Button创建UserControl完全是因为它似乎代码较少。

我已经按照我在微软网站上看到的示例进行操作,并且我收到错误“A'Binding'无法在'Button'类型的'SetSortIndicatorVisibility'属性上设置。'绑定'只能是在DependencyObject的DependencyProperty上设置。“它没有意义,因为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 );
    }

Window 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 个答案:

答案 0 :(得分:5)

您无法将“普通”依赖项属性添加到任意类,它必须是附加属性。此外,所有者类型不应为Button,它应该是声明属性的类

答案 1 :(得分:0)

我认为你第一次使用attached Dependency property是正确的,因为你的getter和setter现在不一致了。

您的属性实际上已注册为依赖项属性,而不是附加依赖项属性(使用“RegisterAttached”而不是“Register”)。