【问题标题】:Create Properties or DependencyProperties that have Code Completion in XAML在 XAML 中创建具有代码完成功能的属性或 DependencyProperties
【发布时间】:2010-02-10 17:33:29
【问题描述】:

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

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

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

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

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

更新:这是我在 SilverLigth 3 中尝试做的一个示例(!)我刚刚和一位同事谈过,他认为问题出在与 Silverlight 3 和 VS 2008 中旧的非 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 代码完成。 :)

【问题讨论】:

  • 对象是普通的 DependencyObjects 或 FrameworkElements 还是 Controls?它们存在于您在 Xaml 中使用它们的同一个项目中?
  • 我将上面的代码直接写在一个普通页面的 C# 文件中(它是 VS-2008 生成的导航应用程序的一部分。

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


【解决方案1】:

您无需执行任何特殊操作即可获得已知类型的智能感知帮助。例如BrushColorBoolean。然而,智能感知在 VS2008 中有点慢,并且可能需要相当长的时间来构建。即使在内置控件上,它也可能非常喜怒无常。

如果您的对象与您正在编辑的 Xaml 位于同一项目中,请尝试构建该项目。

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

【讨论】:

    【解决方案2】:

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

    上面与属性相关的代码应该放入一个单独的库中,并被使用该代码的项目(例如,应用程序)引用。然后它就可以工作了。

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

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 2019-06-26
      • 1970-01-01
      • 2011-11-30
      • 2018-09-17
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多