0

我已经创建了用户控件,我要绑定的属性代码是:

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

和带有值的控件,我想绑定到(从ColorSliderCanvasTextBlock):

<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了对意志的绑定TextBlockTextBlock如果我将绑定设置为ColorSlider3.

所以看来我只能从 one 的最新实例绑定值UserControl。为什么会这样,我该如何解决?

4

2 回答 2

2

您的依赖属性未正确定义...缺少静态部分,并且不需要“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 属性:

  1. 使用 Register 方法注册一个依赖属性;此方法返回一个 DependencyProperty,您应该将其作为可访问的静态只读字段存储在您的类中......”
于 2012-07-07T13:47:47.243 回答
0

看来您已将其设置为 ColorsSlider2 而不是 ColorsSlider3

于 2012-07-07T13:46:04.527 回答