2010-08-13 4 views
0

저는 WPF에 비교적 익숙하지 않기 때문에 뭔가 기본적인 것이 누락되면 사과드립니다. I는 XAML에서의 UserControl 데이터 컨텍스트를 설정WPF UserControl이 디자인 타임에 렌더링되지 않습니다.

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)) 

등 ...

:

가 나는 PT1x, PT1y, PT2x, PT2y라는 종속성 속성 선언 사용자 제어를

의 DataContext = "{RelativeSource = {RelativeSource 자체가} 바인딩}"다음

그리고

는 XAML의 속성에 바인딩 :

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

이 코드는 런타임에 선을 렌더링하지만 디자인 타임에는 아무 것도 렌더링되지 않습니다 (2010 년 블렌드 또는 vs). 디자이너에서 렌더링하는 방법이 있습니까?

감사합니다.

답변

0

블렌드가 가장 외부의 컨트롤 (즉, UserControl)에 정의 된 코드를 성가신 실행하지 않기 때문입니다. 대신 자신의 시각적 트리가있는 자체 호스트를 제공합니다 (가장 바깥 쪽 컨트롤 제외) ^. 따라서 DataContext 절대로 설정됩니다.

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

을 당신은 이런 일에 더 낫다 :

<UserControl x:Name="root"> 
    <Grid DataContext="{Binding ElementName=root}"> 
    </Grid> 
</UserControl> 
나는 누군가가 당신을 전환 할 수 있기 때문에 어쨌든 UserControl 수준에서 DataContext을 설정하는 좋은 방법이 아니라고 주장 할 것

^예, 이로 인해 발생한 문제 이외의 문제가 발생합니다. 그렇습니다, 그것은 엄청나게 고통 스럽습니다. 아니요, 왜 그들이 호스트에서 귀하의 모든 권한을 호스팅하지 않는지 모르겠습니다.

+0

내가 제안한대로 코드를 변경 했는데도 디자이너에서 아무 것도 렌더링하지 않습니다 (VS2010 또는 블렌드). 그냥 궁금 해서요.이 문제를 일으키는 다른 문제는 무엇일까요? – Gerald

관련 문제