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

私のページには、このコントロールの 2 つのインスタンスがあります。

<local:ColorSlider x:Name="ColorsSlider1" />
<!--...-->
<local:ColorSlider x:Name="ColorsSlider3" />

そして、バインドしたい値を持つコントロール (からColorSliderCanvas) 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へのバインディングを削除すると、機能するのは興味深いことですTextBlockTextBlockまた、バインディングをに設定すると、バインディングは背景を更新しColorSlider3ます。

したがって、 one の最新のインスタンスからのみ値をバインドできるようですUserControl。これはなぜですか?どうすれば修正できますか?

4

2 に答える 2

2

依存関係プロパティが正しく定義されていません...静的部分がなく、「これ」は必要ありません:

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

ColorsSlider3 ではなく ColorsSlider2 に設定しているようです

于 2012-07-07T13:46:04.527 に答える