我对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年,设计器中都没有呈现任何内容。有没有办法让它在设计器中呈现?
谢谢!
答案 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>
^是的,这会导致您遇到的问题以外的问题。是的,这是非常痛苦的。不,我不知道为什么他们不只是在他们的主人中完全控制你。