这是我查找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!因此,它会更好,如果我可以使用类名,但没有猜怎么办呢!
答案 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'
}