WPF UserControl не рендерится во время разработки - PullRequest
0 голосов
/ 13 августа 2010

Я относительно новичок в WPF, поэтому прошу прощения, если мне не хватает чего-то простого.

У меня есть пользовательский элемент управления, в котором я объявляю свойства зависимостей с именами PT1x, PT1y, PT2x, PT2y:

   Private _pt1x as double = 9

   Public Property PT1x As Double
        Get
            Return GetValue(PT1xProperty)
        End Get
        Private Set(ByVal value As Double)
            SetValue(PT1xProperty, value)
        End Set
    End Property

    Public Shared ReadOnly PT1xProperty As DependencyProperty = _
                           DependencyProperty.Register("PT1x", _
                           GetType(Double), GetType(Tile), _
                           New FrameworkPropertyMetadata(_pt1x))

и т.д ...

Я установил текст данных usercontrol в xaml:

DataContext = "{Binding RelativeSource = {RelativeSource Self}}"

А затем привязать к свойству в xaml:

    <Line 
        X1="{Binding PT1x}" Y1="{Binding PT1y}"
        X2="{Binding PT2x}" Y2="{Binding PT2y}"
        Stroke="Red"
        StrokeThickness="1"
        x:Name="HS2" />

Это визуализирует строку во время выполнения, но во время разработки ничего не отображается в конструкторе, ни в blend, ни в сравнении с 2010 годом. Есть ли способ сделать так, чтобы она отображалась в конструкторе?

Спасибо!

1 Ответ

0 голосов
/ 15 августа 2010

Это потому, что Blend досадно не выполняет код, определенный вашим самым внешним элементом управления (т. Е. Вашим UserControl). Вместо этого он предоставляет собственный хост, в котором находится ваше визуальное дерево (за вычетом вашего внешнего элемента управления) ^. Следовательно, DataContext никогда не устанавливается. Я бы сказал, что в любом случае не рекомендуется устанавливать DataContext на уровне UserControl, потому что любой может включить его на вас:

<local:YourUserControl DataContext="Haha! All your DC are belong to us!"/>

Вам лучше с чем-то вроде этого:

<UserControl x:Name="root">
    <Grid DataContext="{Binding ElementName=root}">
    </Grid>
</UserControl>

^ Да, это вызывает проблемы, отличные от той, с которой вы столкнулись. Да, это невероятно больно. Нет, я не знаю, почему они не просто предоставляют вам полный контроль над своим хостом.

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