我正在为所有WPF控件创建一个通用动画函数,如TextBlock,Grid,TextBox ......如下所示
private void animateFadeOut(*** displayObj)
{
displayObj.Opacity = 1;
System.Windows.Media.Animation.DoubleAnimation fadingAnimation = new System.Windows.Media.Animation.DoubleAnimation();
fadingAnimation.From = 1;
fadingAnimation.To = 0;
fadingAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5));
displayObj.BeginAnimation(TextBlock.OpacityProperty, fadingAnimation);
}
所以我只想知道应该用哪个类来代替***
。我尝试过UserControl,Object,但我在UserControl中遇到了将TextBlock或Grid转换为UserControl的问题。在Object中,没有Opacity值。那么处理这个问题的最佳方法是什么?
答案 0 :(得分:1)
您可以在MSDN上查看其继承层次结构。
例如。 Grid
:
Inheritance Hierarchy
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Panel
System.Windows.Controls.Grid
System.Windows.Controls.Primitives.SelectiveScrollingGrid
它们都在System.Windows.Controls
命名空间下,但我发现使用FrameworkElement
更好(在我的情况下我需要调用BringIntoView()
)。您可以检查层次结构并自行决定。但是应该使用AFAIK FrameworkElement
,因为它提供了在您的情况下可能需要访问的所有内容(属性和方法)。
答案 1 :(得分:1)
Grid
,TextBlock
和TextBox
的最高共同祖先是FrameworkElement
但是如果你想为Opacity
制作动画,那么它的属性就更高{{3}} {{ 1}}
UIElement
答案 2 :(得分:1)
虽然不确定您的代码是否也适用于Grid,但您要查找的课程是"UIElement"