在XAML中创建具有代码完成的属性或DependencyProperties

时间:2010-02-10 17:33:29

标签: visual-studio-2008 silverlight xaml silverlight-3.0 dependency-properties

我正在尝试创建在Visual Studio中的XAML编辑器中使用它们时具有良好下拉代码完成的DependencyProperties。

许多默认的SilverLight框架属性都有这样的完成,例如BackgroundBorderBrush。此外,Boolean属性会在XAML编辑器中显示True / False选项。对于DependencyProperties也是如此,例如Canvas.TopCanvas.Left等。

我尝试定义自己的ColorBoolean类型的DependencyProperties,因为我相信Color,Brush和Boolean等默认类型可以免费完成。这没有发生。

我认为我必须为我的属性定义一些注释,但没有找到示例,因为Silverlight SDK仅在Visual Studio中显示公共API,而不是内部。

您有什么想法,如何让代码完成属性?

更新:以下是我在 SilverLigth 3 (!)中尝试做的一个示例我刚与一位同事交谈,他认为问题出在与VS 2008中的Silverlight 3和旧的非VS2010-XAML编辑器相关。

XAML:

<Grid x:Name="LayoutRoot">
  <Border test:PropTest.Test="Blue">
    <TextBlock Text="123"/>
  </Border>
</Grid>

代码

namespace PropTest{
  public class PropTest : DependencyObject {
    public static readonly DependencyProperty TestProperty = DependencyProperty.RegisterAttached(
      "Test", typeof(Color), typeof(PropTest), new PropertyMetadata(Colors.Red));

    public static void SetTest(DependencyObject obj, Color color){
      (obj as Border).Background = new SolidColorBrush(color);
    }
    public static Color GetTest(DependencyObject obj){
      return Colors.Red;
    }
  }
}

此示例是可编译/可运行的,但我想使用DependencyProperties而不是应用程序编写API,因此我想要为我的API编写代码。 :)

2 个答案:

答案 0 :(得分:2)

您无需做任何特殊操作即可获得已知类型的智能感知帮助。例如BrushColorBoolean。然而,智能感知在VS2008中有点慢,可能需要很长时间才能构建。即使在内置控件上,它也可能非常温和。

如果您的对象在同一个项目中,则您正在编辑的Xaml尝试构建项目。

你唯一能做的就是耐心等待。

答案 1 :(得分:1)

我刚刚找到了解决方案,至少对Color它现在正在运行。我会尝试用其他类型测试它。我将我的代码直接放入应用程序中,这首先是一种不好的做法,因为我正在尝试编写API,其次,导致代码丢失。

上面与属性相关的代码应该进入单独的库,并由项目使用代码(例如,应用程序)引用。然后它正在运作。

接下来我要尝试的是编写类似于Colors类的Color类的自己的完成类,看看我是否可以为自己的类型编写代码。但也许这是另一个问题。