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;
}
Надеюсь на эту помощь.