VS2010 XAML设计器中的绑定错误,但一般运行良好

时间:2013-05-30 12:34:39

标签: visual-studio-2010 xaml

对于模糊的(ish)标题感到抱歉,我正在开发一个WPF项目,而且它变得相当烦人。我知道VS设计师有时候有点挑剔,但希望这是我能解决的问题。

我有一个依赖属性我也正在绑定,但是设计师给了我蓝色的波浪线并且出现错误:

Error 13 A 'Binding' cannot be used within a 'TextBlock' collection. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

然而,当我运行应用程序时,它一切正常,没有绑定错误,这一切都按预期工作。 VS自首次发生以来已多次重启,但仍然会发生。

我看不出它所指的DependancyProperty有什么问题,所有看起来都非常标准,但也许你们其中一个人可以放弃一些亮点(希望如此)。我不记得我从哪里获得了DP的代码,我知道它是在线的,但是我已经调整过了(我想)。

运行VS2010,项目的目标是.net4.0(不是客户端配置文件)。

谢谢!

XAML

<TextBlock Grid.Column="1" Grid.Row="0" AllowDrop="True" behaviours:DropBehavior.PreviewDropCommand="{Binding Path=DropFile}" Style="{StaticResource styFile}">

DP

public static class DropBehavior {

    private static readonly DependencyProperty PreviewDropCommandProperty = DependencyProperty.RegisterAttached(
        "PreviewDropCommand",
        typeof(ICommand),
        typeof(DropBehavior),
        new PropertyMetadata(null, PreviewDropCommandPropertyChangedCallBack)
    );

    public static void SetPreviewDropCommand(this UIElement inUIElement, ICommand inCommand) {
        inUIElement.SetValue(PreviewDropCommandProperty, inCommand);
    }

    private static ICommand GetPreviewDropCommand(UIElement inUIElement) {
        return (ICommand)inUIElement.GetValue(PreviewDropCommandProperty);
    }

    private static void PreviewDropCommandPropertyChangedCallBack(
        DependencyObject inDependencyObject, DependencyPropertyChangedEventArgs inEventArgs) {
        UIElement uiElement = inDependencyObject as UIElement;
        if (null == uiElement)
            return;

        uiElement.Drop += (sender, args) => {
            GetPreviewDropCommand(uiElement).Execute(args.Data);
            args.Handled = true;
        };
    }
}

1 个答案:

答案 0 :(得分:2)

经过多次提出用户界面抱怨它之后再次看了一下这个问题,原来这就是这一行:

private static readonly DependencyProperty PreviewDropCommandProperty = DependencyProperty.RegisterAttached(
    "PreviewDropCommand",
    typeof(ICommand),
    typeof(DropBehavior),
    new PropertyMetadata(null, PreviewDropCommandPropertyChangedCallBack)
);

应该是public,而不是private声明。好奇的是应用程序运行正常,而不是设计师(或者如果我知道VS的内部工作原则可能不那么好奇)