我正在创建一个UserControl
,我想使用类似于这样的东西:
<controls:ColorWithText Color="Red" Text="Red color" />
到目前为止,我已经实现了类似这样的控件:
<UserControl x:Class="Namespace.ColorWithText" Name="ThisControl">
<StackPanel Orientation="Horizontal" >
<Border Width="15" Height="15" Background="{Binding Color, ElementName=ThisControl}" />
<TextBlock Text="{Binding Text, ElementName=ThisControl}" />
</StackPanel>
</UserControl>
其中Color
和Text
是在代码中定义的控件的依赖属性。这样做是可以的,但每次都指定ElementName
似乎有些不必要。
另一种可行的选择是使用
<UserControl x:Class=… DataContext="{Binding ElementName=ThisControl}" Name="ThisControl">
我也尝试过不指定ElementName
,但那对我来说似乎也不是一个干净的解决方法。
我的两个问题是:
- 为什么
<UserControl DataContext="{RelativeSource Self}">
不起作用? - 最好的做法是什么?
DependencyProperty
的UserControl
。请参见https://nikolalukovic.com/programming/WPF-Custom-UserControl-datacontext-binding-gotcha.html和/或@jdawiz的回答。 - Chris