Задать WPF режим дизайна по умолчанию для объектов - PullRequest
0 голосов
/ 03 апреля 2010

В моем приложении

    <Rectangle.Margin>
    <MultiBinding Converter="{StaticResource XYPosToThicknessConverter}">
        <Binding Path="XPos"/>
        <Binding Path="YPos"/>
    </MultiBinding>
</Rectangle.Margin>

Контекст данных устанавливается во время выполнения. Приложение работает, но в окне дизайна в VS отображается не предварительный просмотр, а System.InvalidCastException. Вот почему я добавил объект по умолчанию в XYPosToThicknessConverter, который ужасен.

class XYPosToThicknessConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
     // stupid check to give the design window its default object.
        if (!(values[0] is IConvertible))
            return new System.Windows.Thickness(3, 3, 0, 0);
    // useful code and exception throwing starts here
    // ...
    }
}

Мои вопросы:

  • Что VS / процесс, который строит окно дизайна, передается XYPosToThicknessConverter и как это можно выяснить самостоятельно.
  • Как мне изменить мой код XAML, чтобы окно дизайна получало объект по умолчанию, и это лучший способ справиться с этой проблемой?

Я использую VS2010RC с Net4.0

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Попробуйте установить запасное значение для вашей привязки. Это то, что я делаю, чтобы заставить вещи отображаться «как будто» в режиме конструктора.

Something="{Binding Smthing, FallbackValue='hello world'}"

НТН

0 голосов
/ 03 апреля 2010

Вам нужно убедиться, что дизайнер может получить действительную копию «XPos» и «YPos», и они имеют те же значения, что и во время выполнения.

Скорее всего, ваш DataContext не настроен в представлении должным образом, поэтому конвертер обнуляется. Если вы установите DataContext для допустимого объекта (который может быть данными времени разработки), ваш код должен работать без значений по умолчанию в конвертере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...