UWP尝试使用附加的依赖属性动画滚动查看器

我试图在UWP中为scrollviewer的水平偏移设置动画。但附加的属性不会被动画目标识别。

      

这是c#代码

  public class ScrollviewerBehaviour { public static readonly DependencyProperty Horizontalofsetproperty = DependencyProperty.RegisterAttached("Horizontalofset", typeof(double), typeof(ScrollviewerBehaviour), new PropertyMetadata(0,new PropertyChangedCallback(OnHorizontalofsetchanged))); public static void SetHorizontalofset(ScrollViewer element, double value) { element.SetValue(Horizontalofsetproperty, value); } public static double GetHorizontalofset(ScrollViewer element) { return (double)element.GetValue(Horizontalofsetproperty); } public static void OnHorizontalofsetchanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { var scrollviewer = (sender as ScrollViewer); scrollviewer.ChangeView((double)e.NewValue, scrollviewer.VerticalOffset, scrollviewer.ZoomFactor); } } 

我想念任何事

由于Windows运行时XAML实现的现有限制,您无法为自定义附加属性设置动画。 请参阅MSDN文档中的 动画XAML附加属性部分。

对于您的情况,您可以创建自定义usercontrol并为此usercontrol定义依赖项属性。 然后,您可以为此依赖项属性设置动画。

在此属性的PropertyChangedCallback处理程序方法中,您可以更改ScrollViewer的Horizo​​ntalofset。

有关详细信息,请参阅以下代码示例:

       

 public sealed partial class MyUserControl1 : UserControl { public MyUserControl1() { this.InitializeComponent(); } public double Horizontalofset { get { return (double)GetValue(HorizontalofsetProperty); } set { SetValue(HorizontalofsetProperty, value); } } // Using a DependencyProperty as the backing store for Horizontalofset. This enables animation, styling, binding, etc... public static readonly DependencyProperty HorizontalofsetProperty = DependencyProperty.Register("Horizontalofset", typeof(double), typeof(MyUserControl1), new PropertyMetadata(0,PropertyChangedCallback)); public static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { var distance = (d as MyUserControl1).scrolviewer.ScrollableWidth; if (distance > (double)e.NewValue) { var ret = (d as MyUserControl1).scrolviewer.ChangeView((double)e.NewValue, (d as MyUserControl1).scrolviewer.VerticalOffset, (d as MyUserControl1).scrolviewer.ZoomFactor); Debug.WriteLine(ret); } } } 
          
 private void Button_Click(object sender, RoutedEventArgs e) { animation.Begin(); } 

请注意,您需要启用EnableDependentAnimation ,否则,您的动画将无效。