WPF C#中的TextBlock,Grid的公共类

时间:2014-04-25 08:39:44

标签: c# wpf user-controls wpf-controls

我正在为所有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值。那么处理这个问题的最佳方法是什么?

3 个答案:

答案 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)

GridTextBlockTextBox的最高共同祖先是FrameworkElement但是如果你想为Opacity制作动画,那么它的属性就更高{{3}} {{ 1}}

UIElement

答案 2 :(得分:1)

虽然不确定您的代码是否也适用于Grid,但您要查找的课程是"UIElement"