我有一个问题,我似乎无法克服。也许有人能帮忙。
我正在创建一个动态创建DoubleAnimations的方法。我会从数组中为它提供一个由不同用户控件组成的数组,它将自动创建DoubleAnimations以添加到StoryBoard中。
问题是,我需要插入两种类型的PropertyPaths: PlaneProjection.RotationYProperty和Control.OpacityProperty。我必须为它们设置不同的Storyboard.SetTarget,所以我需要一种方法来比较在我的方法中我称之为TargetProperty的PropertyPath参数。以下是我在代码中所要做的工作的一部分:
if (TargetProperty == new PropertyPath (PlaneProjection.RotationYProperty))
{
// Do some code
projection = control.Projection as PlaneProjection;
Storyboard.SetTarget(doubleAnimation, projection);
}
else if (TargetProperty == new PropertyPath (Control.OpacityProperty))
{
Storyboard.SetTarget(doubleAnimation, control);
}我能够通过使用bool作为一个变通开关来使我的方法工作,但如果可能的话,我仍然希望减少我的方法中的参数数。
我试过用:
if (TargetProperty.ToString() == new PropertyPath (PlaneProjection.RotationYProperty).ToString())..。还有..。
if (TargetProperty.Equals(new PropertyPath (PlaneProjection.RotationYProperty)))..。但他们都没用。有什么办法绕过这件事吗?我做错了什么吗?
提前感谢!
发布于 2013-06-28 08:43:29
在KooKiz建议我使用DependencyObject之后,我意识到我可以使用DependencyProperty而不是PropertyPath,然后尝试进行比较。正如my所提到的,比较PropertyPath对象似乎是不可能的--至少在我的例子中是这样的。我的代码后来变成了这样,现在它就像一种魅力:
if (TargetProperty == PlaneProjection.RotationYProperty)
{
// Do some code
projection = control.Projection as PlaneProjection;
Storyboard.SetTarget(doubleAnimation, projection);
}
else if (TargetProperty == Control.OpacityProperty)
{
Storyboard.SetTarget(doubleAnimation, control);
}发布于 2013-06-27 16:34:36
如果在这两种情况下使用相同的逻辑来创建动画,则直接将目标属性传递给您的方法:
public void AssignAnimation(DependencyObject property)
{
// Create the doubleAnimation
// ...
// Assign it
Storyboard.SetTarget(doubleAnimation, property);
}那么你只需要直接用你的财产来调用它:
AssignAnimation(control);
AssignAnimation(control.Projection);如果你使用不同的逻辑,那么我建议使用两种不同的方法。您的代码将更易于阅读和维护。
https://stackoverflow.com/questions/17343129
复制相似问题