我有一个自定义控件,它使用On(属性名)ValueChanged从字典中读取条目,并为该控件设置参数。
我还想将该控件用作独立控件,而不仅仅是数据绑定控件。
那么为什么OnPropertyValueChanged只能在数据集中工作呢?
依赖属性是否只在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.
当我从绑定中添加子画面时,它会运行依赖属性更改回调,但在独立使用控件时,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也是该控件中依赖属性
发布于 2011-08-02 20:00:04
我非常怀疑您没有将spriteToggleButton
类的idleSprite
、selectedSprite
和highlightedSprite
实现为依赖属性。这样做,它就应该开始工作了。
不管你使用UserControl
实现spriteToggleButton
有什么价值,我都会从ToggleButton
中派生出来,并替换默认模板。
https://stackoverflow.com/questions/6910276
复制相似问题