2010-08-13 117 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