C# 在..PropertyValueChanged';跑不动
我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目,并为该控件设置参数 我还希望将该控件用作独立控件,而不仅仅是数据绑定控件 那么,为什么OnPropertyValueChanged只在数据集中起作用呢 依赖项属性是否仅从xaml起作用,这是否意味着必须从容器类中的属性绑定?(可能已经回答了我自己的问题) 在mymainpage.xaml中C# 在..PropertyValueChanged';跑不动,c#,silverlight,windows-phone,C#,Silverlight,Windows Phone,我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目,并为该控件设置参数 我还希望将该控件用作独立控件,而不仅仅是数据绑定控件 那么,为什么OnPropertyValueChanged只在数据集中起作用呢 依赖项属性是否仅从xaml起作用,这是否意味着必须从容器类中的属性绑定?(可能已经回答了我自己的问题) 在mymainpage.xaml中 <local:spriteToggleButton x:Name="testButton" H
<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}" />
当我从绑定中添加精灵时,它会运行dependency property changed回调,但当控件单独使用时,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"];
}
PritePropertyValueChanged上的私有静态void(DependencyObject d,DependencyPropertyChangedEventArgs e)
{
var控制=d作为spriteToggleButton;
var sprites=e.NewValue作为字典;
control.idleSprite=精灵[“idle”];
control.selectedSprite=sprite[“selected”];
control.highlightedSprite=精灵[“高亮显示”];
}
这在我的spriteToggleButton里面
<local:spriteView x:Name="Idle" Width="294" Height="57" HorizontalAlignment="Center" Sprite="{Binding idleSprite, ElementName=toggleSpriteControl}" />
...
...
Sprite也是该控件中的一个依赖属性我很怀疑您没有将
spriteToggleButton
类的idleSprite
、selectedSprite
和highlightedSprite
实现为依赖属性。这样做,它应该开始工作
不管它值多少钱,您似乎正在使用
用户控件实现spriteToggleButton
,我将从ToggleButton
派生并替换默认模板。我非常怀疑您没有实现idleSprite
,spriteToggleButton
类的selectedSprite
和highlightedSprite
作为依赖项属性。这样做,它应该开始工作
不管它值多少钱,您似乎正在使用UserControl
实现spriteToggleButton
,我将从ToggleButton
派生并替换默认模板。这里有一些示例代码会有所帮助。只有在Sprites属性本身发生更改时,onPritePropertyChanged才会触发,当集合内容发生更改时,则不会。您能给出不起作用的确切代码和预期结果吗?当我使用此参数Sprites=“{Binding testSprites,ElementName=mainPage}”
从mainPage类获取属性时,它实际上会触发。它没有做的是更新控件中的那些控件。@Joseph:你能不能也显示不起作用的代码?我不清楚你认为“独立”是什么意思?您的意思似乎是使用的控件没有数据绑定。这很好,但是当使用“独立”时,如何分配Sprites
属性?在get
和set
属性访问器中为Sprites
属性分配了哪些代码?@Joseph:请不要在注释中发布代码或xaml,因为它们不可读,只需使用其他详细信息再次编辑您的问题。一点示例代码在这里会有所帮助。OnPritePropertyChanged仅在Sprites属性本身更改时启动,而不是在集合内容更改时启动。您能给出不起作用的确切代码和预期结果吗?当我使用此参数Sprites=“{Binding testSprites,ElementName=mainPage}”
从mainPage类获取属性时,它实际上会触发。它没有做的是更新控件中的那些控件。@Joseph:你能不能也显示不起作用的代码?我不清楚你认为“独立”是什么意思?您的意思似乎是使用的控件没有数据绑定。这很好,但是当使用“独立”时,如何分配Sprites
属性?在get
和set
属性访问器中为Sprites
属性分配了哪些代码?@Joseph:请不要在注释中发布代码或xaml,因为它们不可读,只需再次编辑您的问题并提供更多详细信息。
<local:spriteView x:Name="Idle" Width="294" Height="57" HorizontalAlignment="Center" Sprite="{Binding idleSprite, ElementName=toggleSpriteControl}" />
...