WPF C#中TextBlock、Grid的公共类
本文关键字:Grid TextBlock WPF | 更新日期: 2023-09-27 17:59:57
我正在为所有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,但在将TextBlock或Grid转换为UserControl的UserControl中遇到了问题。在"对象"中,没有"不透明度"值。那么,处理这个问题的最佳方法是什么呢?
Grid
、TextBlock
和TextBox
的最高公共祖先是FrameworkElement
,但如果要动画化Opacity
,则它是更高类别UIElement
的属性
private void animateFadeOut(UIElement 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(UIElement.OpacityProperty, fadingAnimation);
}
虽然不确定您的代码是否也适用于Grid,但您要查找的类是"UIElement"
您可以在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
,因为它提供了在您的情况下可能需要访问的一切(属性和方法)。