Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在..PropertyValueChanged';跑不动_C#_Silverlight_Windows Phone - Fatal编程技术网

C# 在..PropertyValueChanged';跑不动

C# 在..PropertyValueChanged';跑不动,c#,silverlight,windows-phone,C#,Silverlight,Windows Phone,我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目,并为该控件设置参数 我还希望将该控件用作独立控件,而不仅仅是数据绑定控件 那么,为什么OnPropertyValueChanged只在数据集中起作用呢 依赖项属性是否仅从xaml起作用,这是否意味着必须从容器类中的属性绑定?(可能已经回答了我自己的问题) 在mymainpage.xaml中 <local:spriteToggleButton x:Name="testButton" H

我有一个自定义控件,它使用On(propertyname)ValueChanged从字典中读取项目,并为该控件设置参数

我还希望将该控件用作独立控件,而不仅仅是数据绑定控件

那么,为什么OnPropertyValueChanged只在数据集中起作用呢

依赖项属性是否仅从xaml起作用,这是否意味着必须从容器类中的属性绑定?(可能已经回答了我自己的问题)

在mymainpage.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}" />
当我从绑定中添加精灵时,它会运行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}"  />
 ...