Создайте свойства или свойства зависимости, которые имеют дополнение кода в XAML - PullRequest
3 голосов
/ 10 февраля 2010

Я пытаюсь создать свойства DependencyProperties, которые имеют хорошее завершение выпадающего кода при использовании их в XAML-редакторе в Visual Studio.

Многие свойства фреймворка SilverLight по умолчанию имеют такое завершение, например, Background или BorderBrush. Кроме того, свойства Boolean показывают выбор True / False в XAML-редакторе. То же самое верно для DependencyProperties, таких как Canvas.Top и Canvas.Left и т. Д.

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

Я считаю, что мне нужно определить некоторые аннотации для моих свойств, но я не нашел пример, поскольку Silverlight SDK показывает только открытый API в Visual Studio, а не внутренние компоненты.

У вас есть идея, как получить код, заполненный Свойства?

Обновление: Вот пример того, что я пытаюсь сделать в SilverLigth 3 (!) Я только что говорил с коллегой, и он считает, что проблема связана с Silverlight 3 и старый не-VS2010-XAML-редактор в VS 2008.

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;
    }
  }
}

Этот пример является компилируемым / запускаемым, но я хочу написать API, используя DependencyProperties, а не приложение, и, следовательно, я хочу завершить код для моего API. :)

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Вам не нужно делать ничего особенного, чтобы получить справку по intellisense для известных типов. Например Brush, Color или Boolean. Однако intellisense в VS2008 немного медленный и его сборка может занять довольно много времени. Это может быть весьма сдержанным даже на встроенных элементах управления.

Если ваши объекты находятся в одном и том же проекте, который вы редактируете в Xaml, попробуйте создать проект.

Единственное, что вы можете сделать, это просто набраться терпения.

1 голос
/ 11 февраля 2010

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

Приведенный выше код свойства должен входить в отдельную библиотеку , на которую должен ссылаться проект с использованием кода (например, приложения). Тогда это работает.

Следующая вещь, которую я попробую, - написать свой собственный класс завершения, аналогичный классу Colors для типа Color, и посмотреть, смогу ли я написать код для своих собственных типов. но, может быть, это другой вопрос.

...