Ответов пока нет, конечно, с количеством разработчиков WPF, кто-то еще видел эту проблему?
Тем временем я изучил / прочитал еще немного и обнаружил свойство Timeline.DesiredFrameRate .
Когда мой дисплей работал на частоте 50 Гц по вертикали, я попытался установить 50 кадров в секунду в надежде на синхронизацию. К сожалению, это не повлияло на разрыв.
Однако мне пришлось применить его к одной конкретной анимации, которую я создал (в коде), используя BeginAnimation (). Я не уверен, как это повлияет на «глобальную» частоту кадров.
Вместо этого я бы ожидал, что это нужно сделать на более глобальном уровне, скажем, в окне просмотра, однако я не смог найти свойство DesiredFramerate в объекте области просмотра.
Еще одной областью, на которую можно обратить внимание, может быть RenderCapability.Tier , но у меня еще не было времени взглянуть на нее подробно.
[Update]
Нет решения, но полезный совет. Чтобы установить DesiredFramerate глобально (т. Е. Для всех анимаций в области просмотра), вы можете переопределить PropertyMetadata для
Свойство зависимости Timeline.DesiredFrameRateProperty:
// Set the global desired framerate to 50 frames per second
Startup += delegate(object sender, StartupEventArgs e)
{
Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline),
new PropertyMetadata(50));
};
Лучше всего поместить это в конструктор стандартного класса WPF Application.
К сожалению, это не решило мою проблему, потому что даже при установке его в FPS он не должен быть достаточно точно синхронизирован с v-sync монитора.
Полезно знать об этом, особенно если у вас медленная анимация и вы хотите сэкономить нагрузку на процессор, установив FPS намного ниже, чем значение по умолчанию 60 кадров в секунду.
[Update]
Установка DesireFrameRate на очень высокое значение, такое как 100+, похоже, уменьшает, но не устраняет мерцание. Однако один большой недостаток заключается в том, что процессор (на моем 4-летнем ПК) достигает 35%.