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中遇到了问题。在"对象"中,没有"不透明度"值。那么,处理这个问题的最佳方法是什么呢?

WPF C#中TextBlock、Grid的公共类

GridTextBlockTextBox的最高公共祖先是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,因为它提供了在您的情况下可能需要访问的一切(属性和方法)。