3

我有一个方法,当被调用时,它会返回一个LinearGradientBrush随机颜色的GradientStop,我在它们mylabel.RegisterName上使用以供以后在storyboard动画中使用。为了防止第一次调用时出现没有注册名称的错误,我这样做:

try
{
    myLabel.UnregisterName("GS1");
    myLabel.UnregisterName("GS2");
    myLabel.UnregisterName("GS3");
    myLabel.UnregisterName("GS4");
}
catch
{
}

我还没有找到覆盖注册名称的方法。有更好的方法来做到这一点吗?

4

1 回答 1

4

怎么样UnregisterName

当我只能阅读部分问题时,这就是我试图回答的结果......

进一步挖掘,可能找到了另一个(更简单的)替代方案:

var isGs1Defined = NameScope.GetNameScope(myLabel).FindName("GS1") == null;

或包装得很好:

public static bool IsNameRegistered(DependencyObject depObject, string name)
{
    var namescope = NameScope.GetNameScope(depObject);
    if(namescope == null)
        return false;
    return namescope.FindName(name) != null;
}
于 2012-12-31T22:10:07.637 回答