WPF UserControl在设计时不呈现

时间:2010-08-13 19:21:02

标签: wpf data-binding user-controls designer

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

等...

我在xaml中设置了usercontrol的datacontext:

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" />

这会在运行时呈现一条线,但在设计时,无论是在混合中还是在2010年,设计器中都没有呈现任何内容。有没有办法让它在设计器中呈现?

谢谢!

1 个答案:

答案 0 :(得分: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>

^是的,这会导致您遇到的问题以外的问题。是的,这是非常痛苦的。不,我不知道为什么他们不只是在他们的主人中完全控制你。