我相信 Windows.UI.Composition 工具与按钮上的 XAML VisualStates 冲突。
GIF #1 当按钮处于正常状态时,没有光标悬停,动画工作并且按钮在向下滚动时成功消失,然后在向上滚动时成功重新出现。
GIF #2 如果当合成动画完成时光标悬停在按钮上,并且鼠标在向上滚动之前退出按钮,我相信 PointerOver 状态会被冻结并且 0% 的不透明度会卡住。修复它的唯一方法是再次悬停以解除 XAML VisualStates 的干扰。
按钮都在同一个 StackPanel 中,这是不透明动画的目标。当一个按钮出现这个问题时,整个 StackPanel 会卡在 0% 的不透明度。下面的代码是一般要点,为简洁起见省略了一些部分。我不认为这是代码问题,我认为这是平台限制,我正在寻找解决方法。
CompositionPropertySet _scrollerPropertySet =
ElementCompositionPreview.GetScrollViewerManipulationPropertySet((ScrollViewer)sender);
Compositor _compositor = _scrollerPropertySet.Compositor;
CompositionPropertySet _props = _compositor.CreatePropertySet();
_props.InsertScalar("progress", 0);
var scrollingProperties =
_scrollerPropertySet.GetSpecializedReference<ManipulationPropertySetReferenceNode>();
var props = _props.GetReference();
var progressNode = props.GetScalarProperty("progress");
ExpressionNode progressAnimation = EF.Clamp(-scrollingProperties.Translation.Y / clampSizeNode, 0, 1);
_props.StartAnimation("progress", progressAnimation);
// StackPanel relevant code:
Visual carOperationButtonStackPanelVisual=
ElementCompositionPreview.GetElementVisual(CarOperationStackPanel);
ExpressionNode carSubtitleObjectOpacityAnimation = 1 - (progressNode * 2);
carOperationButtonStackPanelVisual.StartAnimation("Opacity", carSubtitleObjectOpacityAnimation);