2011-08-02 7 views
1

On(propertyname)ValueChangedを使用して辞書から項目を読み取り、そのコントロールのパラメータを設定するカスタムコントロールがあります。データ型の外でOn..PropertyValueChangedが実行されない

また、データバインドされたコントロールだけでなく、スタンドアロンとしてこのコントロールを使用したいと思います。

OnPropertyValueChangedはどのようにデータセット内でのみ動作しますか?

依存関係のプロパティはxamlからしか機能しませんが、コンテナクラスのプロパティからバインドする必要がありますか?私はそれが依存関係プロパティが変更され実行される結合からスプライトを追加するときに、私のMainPage.xamlをしてmainpage.xaml.cs

testSprites.Add("idle", idlesprite); // a dictionary of a custom sprite object 
    testSprites.Add("highlighted", highlightedsprite); 
    testSprites.Add("selected", selectedsprite); 

    testString = "this is a test"; // this property is picked up by the binding. 

<local:spriteToggleButton x:Name="testButton" HorizontalAlignment="Center" Text="{Binding testString, ElementName=mainPage}" Correct="true" Margin="93,561,93,63" Grid.Row="1" Sprites="{Binding testSprites, ElementName=mainPage}" /> 

を(自分の質問に答えたかもしれません)コントロールが使用されているときにspriteToggleButtonクラス内のプロパティが更新されないスタンドアロン

これは私の依存関係プロパティの変更コールバック

private static void OnSpritesPropertyValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var control = d as spriteToggleButton; 
     var sprites = e.NewValue as Dictionary<string, Quiz.Sprite>; 

     control.idleSprite = sprites["idle"]; 
     control.selectedSprite = sprites["selected"]; 
     control.highlightedSprite = sprites["highlighted"]; 
    } 

これは私のspriteToggleButton

<local:spriteView x:Name="Idle" Width="294" Height="57" HorizontalAlignment="Center" Sprite="{Binding idleSprite, ElementName=toggleSpriteControl}" /> 
... 

内のスプライトは、あなたがidleSpriteselectedSpritespriteToggleButtonhighlightedSpriteを実装していない私は非常に疑わしいまた、そのコントロールの依存関係プロパティ

+0

サンプルコードを少し参考にしてください。 – AnthonyWJones

+0

これが役に立ちます。 –

+0

OnSpritesPropertyChangedは、コレクションの内容が変更されたときではなく、Spritesプロパティ自体が変更されたときにのみ発生します。あなたは働いていない正確なコードと期待される結果を教えてください。 –

答えて

1

ですクラスを依存プロパティとして定義します。それを行うと、それは動作を開始する必要があります。

UserControlを使用してspriteToggleButtonを実装していると思われる場合は、代わりにToggleButtonから派生し、デフォルトテンプレートを置き換えます。

関連する問題