2010-08-13 7 views
0

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

У меня есть пользовательский элемент управления, где я декларировать свойства зависимостей с именем 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)) 

и т.д ...

я установить DataContext в UserControl в XAML:

DataContext = "{Binding RelativeSource = {RelativeSource Само}}"

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

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

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

Спасибо!

ответ

0

Это потому, что 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> 

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

+0

Я изменил свой код, как вы предлагали, но это ничего не делает в дизайнере (VS2010-or- Blend). Просто любопытно: какие другие проблемы могут сделать это так? – Gerald

Смежные вопросы