我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目并设置该控件的参数。
我还想将该控件用作独立控件,而不仅仅是数据绑定控件。
那么为什么OnPropertyValueChanged仅适用于数据集?
Dopendency属性是否仅适用于xaml,这是否意味着我必须从容器类中的属性进行绑定? (可能回答了我自己的问题)
在我的mainpage.xaml
中 <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}" />
在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.
当我从绑定中添加sprite时,它运行依赖属性更改了回调,但是当独立使用控件时,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}" />
...
Sprite也是该控件中的依赖属性
答案 0 :(得分:1)
我非常怀疑您没有将idleSprite
类的selectedSprite
,highlightedSprite
和spriteToggleButton
实现为依赖项属性。这样做,它应该开始工作。
如果您使用spriteToggleButton
来实现UserControl
的价值,我会从ToggleButton
派生并替换默认模板。