覆盖registeredName

时间:2012-12-28 21:50:04

标签: wpf storyboard

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

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

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

1 个答案:

答案 0 :(得分:4)

UnregisterName怎么样?

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

进一步挖掘,可能已找到另一种(WAY更简单)替代方案:

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;
}