我已经创建了用户控件,我要绑定的属性的代码是:
public Color Value
{
get
{
return (Color)this.GetValue(this.ValueProperty);
}
set
{
this.SetValue(this.ValueProperty, value);
}
}
public readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(Color),
typeof(ColorSlider), new PropertyMetadata(Colors.Red))
我的页面中有两个此控件的实例:
<local:ColorSlider x:Name="ColorsSlider1" />
<!--...-->
<local:ColorSlider x:Name="ColorsSlider3" />
以及我想绑定到的带有值的控件(从ColorSlider
到Canvas
和TextBlock
):
<Canvas x:Name="TileCanvas" Grid.Column="0" Margin="30" Width="173" Height="173"
Background="{Binding Value, ElementName=ColorsSlider1, Converter={StaticResource ColorToSolidBrushConverter}}">
<TextBlock x:Name="TileText" Text="dsdfsdfsf"
Foreground="{Binding Value, ElementName=ColorsSlider3, Converter={StaticResource ColorToSolidBrushConverter}}"/>
</Canvas>
所以问题来了。绑定到Canvas
有效,但绑定到TextBlock
不起作用!有趣的是,如果我删除ColorSlider3
与TextBlock
的绑定将起作用!此外,如果我将绑定设置为 ColorSlider3
,绑定将更新TextBlock
背景。
所以似乎我只能绑定一个UserControl
的最新实例的值。为什么会这样,我该如何解决?
您的依赖项属性未正确定义...缺少静态部分,也不需要"this":
public Color Value
{
get
{
return (Color)this.GetValue(ValueProperty);
}
set
{
this.SetValue(ValueProperty, value);
}
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(Color),
typeof(ColorSlider), new PropertyMetadata(Colors.Red));
编辑-----------------
很高兴知道它对您有用。然而,MS决定它是静态的真正原因......从来没有关于它,但根据MSDN:
"自定义依赖项属性。
如果希望自定义类型的属性支持值表达式、属性失效、每类型默认值、继承、数据绑定、动画或样式,则应按照以下准则和过程使用依赖项属性支持这些 CLR 属性:
- 使用 Register 方法注册依赖项属性;此方法返回一个 DependencyProperty,应将其存储为类中可访问的静态只读字段..."
似乎您已将其设置为ColorsSlider2而不是ColorsSlider3