使用uielement.GetValue(),错误“非静态字段需要对象引用”

时间:2011-07-19 13:37:35

标签: c# silverlight silverlight-4.0

我正在使用针对Silverlight的Bing贴图API,并且如果针脚名称不等于代码中其他位置的值,则需要在地图上循环选择图钉并执行一些格式化。

这是功能:

private void deselectAllPins(MapLayer mainMapLayer)
    {
        foreach (UIElement ui in mainMapLayer.Children)
            if (ui is SitePushpin)
            {
                SolidColorBrush scb = new SolidColorBrush(Colors.Red);

                if (ui.GetValue(SitePushpin.SiteName).ToString() != hiddenShortName.Text)
                {
                    ....formatting
                }
            }
    }

'SitePushpin'声明为:

public class SitePushpin : Pushpin
{
    public string SiteName { get; set; }
    public SitePushpin(Color Bg)
    {
        this.Name = Guid.NewGuid().ToString();
        SolidColorBrush scb = new SolidColorBrush(Bg);
        this.Background = scb;
    }
}

我的问题出现在带有ui.GetValue的if语句中。它无法看到SiteName属性并出现错误

  

“非静止字段需要对象引用”

我有什么想法可以让它看到这个价值?

非常感谢 帽

2 个答案:

答案 0 :(得分:1)

属性SiteName是一个实例属性,而不是type/static,因此您应该拥有SitePushpin类的实例,然后访问SiteName属性。

SO

var pushpin = ui as SitePushpin;
if (pushpin != null)
{
     SolidColorBrush scb = new SolidColorBrush(Colors.Red); 
     if (ui.GetValue(pushpin.SiteName).ToString() != hiddenShortName.Text)                                 
     {
        ....formatting                 
     } 
}

答案 1 :(得分:-2)

改变这个:

if (ui.GetValue(SitePushpin.SiteName).ToString() 

到此:

if (ui.GetValue(ui.SiteName).ToString() 

甚至是这样:

if (ui.SiteName != hiddenShortName.Text)