Wpf 覆盖registeredName
我有一个方法,当调用它时,它会返回一个带有随机颜色的Wpf 覆盖registeredName,wpf,storyboard,Wpf,Storyboard,我有一个方法,当调用它时,它会返回一个带有随机颜色的GradientStop的LinearGradientBrush,并在它们上使用mylabel.RegisterName,以便以后在情节提要动画中使用。 为了防止在没有注册名称的情况下第一次调用时出错,我执行以下操作: try { myLabel.UnregisterName("GS1"); myLabel.UnregisterName("GS2"); myLabel.UnregisterName("GS3");
GradientStop
的LinearGradientBrush
,并在它们上使用mylabel.RegisterName
,以便以后在情节提要
动画中使用。
为了防止在没有注册名称的情况下第一次调用时出错,我执行以下操作:
try
{
myLabel.UnregisterName("GS1");
myLabel.UnregisterName("GS2");
myLabel.UnregisterName("GS3");
myLabel.UnregisterName("GS4");
}
catch
{
}
我没有找到覆盖注册名称的方法。有更好的方法吗?取消注册名怎么样
(这就是我在只能阅读部分问题时试图回答的结果…)
再仔细研究一下,可能会发现另一种(更简单的)选择:
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;
}
哈-显然不是;抱歉,当我在手机上读到这些信息时,我的手机视图中的信息被切断了。当我回到我的电脑时,我将重新访问。@Christian抱歉,为了您的时间和一个好的选择,我修改了答案+1。我更喜欢它,而不是
try catch
,以避免出现明显的异常。我明天会测试它。不用担心-FWIF,您希望在GetNameScope和FindName之间进行空检查;它可以返回null。从不使用DependencyObject做什么?