DoubleAnimation жалуется на происхождение == NaN, только когда ресурс находится в Window

У меня есть большое приложение WPF. Я хочу сделать пользовательский интерфейс многопоточным. В рамках этого процесса я перемещаю некоторые ресурсы управления и стиля приложений на уровень окна. (По своему опыту я знаю, что не могу использовать DynamicResource и разрешать его на уровне приложения, если не нахожусь в потоке приложения.) В любом случае, я переместил кучу управляющих ресурсов. Приложение работает с одной неприятной проблемой: все мои анимации на FrameworkElement Height и Width сломались. Все они терпят неудачу, потому что контроль имеет ширину или высоту NaN. Все эти анимации работают, когда шаблоны управления зарегистрированы на уровне приложения. Все мои элементы управления, где я анимирую высоту или ширину, имеют соответствующие значения высоты или ширины по умолчанию, которые не являются NaN. Почему местоположение ресурса влияет на это?

1 ответ

Используйте ActualWidth и ActualHeight. Nan означает, что эти свойства еще не установлены. /questions/18959446/v-chem-raznitsa-mezhdu-shirinoj-i-fakticheskoj-shirinoj-v-wpf/18959468#18959468

Это поздно, но на случай, если кто-то еще вмешается. DoubleAnimation - это вспомогательный класс, который позволяет двойному значению плавно переходить от одного значения к другому. Поскольку вы не указываете ширину явно для своей сетки, значение по умолчанию - NaN. Таким образом, DoubleAnimation пытается перейти от NaN к любому целевому значению. Это невозможно сделать по понятным причинам. Если вы установите ширину сетки, она должна работать правильно.

Обходной путь - установить ширину сетки после ее загрузки в конструктор:

`public Grid()
{
    InitializeComponent();
    this.Loaded += (s, _) => this.Width = this.ActualWidth;
}

Надеюсь на эту помощь.

Другие вопросы по тегам