使用对象调用时找不到UIElement的成员

时间:2019-02-02 05:54:09

标签: uwp

这是我查找UIElement的ActualWidth的函数,它可以是任何UIElement,包括Textbox,TextBlock,Grid等。当我将targetElement发送到函数并使用点运算符查找ActualWidth时,它无法识别该成员文本框,这里是'ActualWidth'成员。为什么会这样?该如何解决?

private void FindActualWidth(UIElement targetElement)
{
    double myActualWidth = targetElement.ActualWidth;
    //Error: UIElement does not contain definition for 'ActualWidth'
}

//Usage
FindActualWidth(TextBox1);
FindActualWidth(Grid1);

如果我使用它像,双myActualWidth =((文本框)targetElement).ActualWidth;它可以正常工作,但是targetElement不一定总是TextBox!因此,它会更好,如果我可以使用类名,但没有猜怎么办呢!

1 个答案:

答案 0 :(得分:1)

错误是正确的:UIElement没有ActualWidth属性。

您是正确的,您需要从UIElement强制转换为定义ActualWidth的类。它不必是派生程度最高的类(例如TextBox)。它可以是对象继承的任何类。您无需猜测此类:您可以在文档中找到定义ActualWidth的类。

在文档中搜索ActualWidth,我们发现它是由UIElement的子级FrameworkElement定义的。由于您知道TextBox可以工作,因此您也可以在其中查找它:TextBox。ActualWidth文档说它继承自FrameworkElement

您可以更改代码以将其强制转换为FrameworkElement以获取ActualWidth属性,并且该方法适用于具有ActualWidth的所有内容:

private void FindActualWidth(UIElement targetElement)
{
   double myActualWidth = (targetElement as FrameworkElement)?.ActualWidth;
    //No error: FrameworkElement defines 'ActualWidth'
}