Член UIElement не найден при вызове с использованием объекта - PullRequest
0 голосов
/ 02 февраля 2019

Вот моя функция, чтобы найти ActualWidth UIElement, это может быть любой 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);

Если я использую это как, double myActualWidth = ((TextBox) targetElement) .ActualWidth;это работает без проблем, но targetElement не всегда может быть TextBox!Так что будет лучше, если я смогу использовать имя класса, но не знаю, как это сделать!

1 Ответ

0 голосов
/ 02 февраля 2019

Ошибка правильная: 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'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...