2010-08-13 118 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)) 

等我在XAML中设置用户控件的DataContext的...

的DataContext = “{结合的RelativeSource = {的RelativeSource自}}”

然后结合在XAML属性:

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

这会在运行时渲染一条线,但在设计时,设计器中不会呈现任何渲染效果,无论是混合还是vs 2010。有没有办法在设计器中渲染它?

谢谢!

回答

0

这是因为Blend恼人地不执行由最外层控制(即您的UserControl)定义的任何代码。它提供了自己的主机,其中你的视觉树所在(减去你最外层的控制)^。因此,DataContext从未设置。我认为,这不是很好的做法,设置DataContextUserControl水平,无论如何,因为任何人都可以在你打开它:

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

你的东西最好是这样的:

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

^是的,这会导致您遇到的问题以外的问题。是的,这是非常痛苦的。不,我不知道他们为什么不把自己的全部控制权托管在他们的主人身上。

+0

我按照你的建议改变了我的代码,但是这并没有在设计器中渲染任何东西(VS2010-或者Blend)。只是好奇:还有哪些其他问题可能会这样做呢? – Gerald 2010-08-18 12:11:54