UWP 尝试使用附加的依赖属性对滚动查看器进行动画处理

2023-12-12

我正在尝试在 UWP 中对滚动查看器的水平偏移进行动画处理。但动画目标未识别附加属性。

<Grid x:Name="maingrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.Resources>
        <Storyboard x:Key="animation" x:Name="animation">
            <DoubleAnimation Storyboard.TargetName="scrolviewer" 
                                         Storyboard.TargetProperty="(local:ScrollviewerBehaviour.Horizontalofset)"
                                         Duration="0:0:1" From="0"  To="80"/>
        </Storyboard>
    </Grid.Resources>
    <Button Width="100" Height="50" Click="Button_Click_1"/>
    <ScrollViewer x:Name="scrolviewer" local:ScrollviewerBehaviour.Horizontalofset="0" Width="200" Height="100" HorizontalScrollBarVisibility="Visible">
        <TextBlock Text="aaaaaaaaaaaaaaaaaaaaaaaaa" FontSize="20"/>
    </ScrollViewer>

</Grid>

这是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 实现的现有限制,您无法对自定义附加属性进行动画处理。请参见动画 XAML 附加属性部分在MSDN文档.

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

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

详细请参考我下面的代码示例:

<UserControl
x:Class="Appanimate.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Appanimate"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<Grid>
    <ScrollViewer x:Name="scrolviewer" Width="200" Height="100" HorizontalScrollBarVisibility="Visible">
        <TextBlock Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" FontSize="20"/>
    </ScrollViewer>
</Grid>
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);
        }

    }
}
<Grid x:Name="maingrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.Resources>
            <Storyboard x:Key="animation" x:Name="animation">
                <DoubleAnimation Storyboard.TargetName="myusercontrol" 
                                     Storyboard.TargetProperty="Horizontalofset"
                                     Duration="0:0:1" From="0"  To="80" EnableDependentAnimation="True"/>
            </Storyboard>
        </Grid.Resources>
        <Button Width="100" Height="50" Click="Button_Click"/>
        <local:MyUserControl1 x:Name="myusercontrol" Horizontalofset="0"></local:MyUserControl1>
    </Grid>
private void Button_Click(object sender, RoutedEventArgs e)
{
    animation.Begin();

}

请注意,您需要启用EnableDependentAnimation,如果没有,你的动画将无法工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UWP 尝试使用附加的依赖属性对滚动查看器进行动画处理 的相关文章

  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ScrollableControl 在整个控件周围绘制边框

    我正在构建基于的自定义用户控件ScrollableControl 现在我正在尝试在控件周围添加边框 类似于 DataGridView 的边框 我可以使用以下方法绘制边框 e Graphics TranslateTransform AutoS
  • 有什么办法可以让这个 C# 代码更快吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在读取一个大文件 X12 并解析其中的信息 我有两个瓶颈功能 我似乎无法解决 read line 和 get element 有什
  • 改进绩效反思 - 我应该考虑哪些替代方案?

    我需要动态地设置对象上的一堆或属性的值 将其称为传输对象 将在短时间内创建相当数量的此类传输对象并设置其属性 我想避免使用反射 还有其他选择吗 如果是的话 有我可以查看的示例实现吗 Use Delegate CreateDelegate h
  • 从 C# 访问 COM vtable

    C 中有没有办法访问 COM 对象的虚拟方法表以获取函数的地址 经过大量搜索和拼凑不同的部分解决方案后 我弄清楚了如何做到这一点 首先 您需要为您尝试访问的对象定义 COM 组件类 ComImport Guid InterfaceType
  • 增强缓冲区调用后丢失自定义点类型的数据

    我有我自己的观点 class LocationWayPoint public latlong container location WORD index PWeakBasicStation station namespace boost n
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • FxCop 和 GAC 疯狂

    当我尝试分析依赖于模式和实践 企业库数据 以及其他 2 0 0 0 的项目时使用 FxCop FxCop 抱怨它不能 定位程序集引用 即使正在分析的应用程序 dll 是根据其编译的此版本及其在 GAC 中 如果我浏览到 GAC 尝试选择相同
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • IOS Box2D - 身体遵循基于速度波动的点数组的特定路径

    我有一个关于身体的问题 它遵循特定的路径 首先是将身体移动到目标点的方法 const float destinationControl 0 3f b2Vec2 targetPosition path counter b2Vec2 missi
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • 通过 C++ 标头在 C++ 和 C# 中使用枚举

    我有一个用 C 编写的服务器 位于命名管道的末端 嗯 提供服务 可以发送到服务器的命令在位于头文件中的枚举中定义 enum e doThing1 e doThing2 e doLastThing 所需枚举的值被放入发送到服务器的消息的第一个
  • 我的 C 程序无法运行,并显示“无法执行二进制文件:Exec 格式错误”

    我刚刚从 C 开始 我试图编译下面的代码并执行它 但出现错误 也在运行sizeBS 或数据堆栈中没有显示任何内容 include
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http

随机推荐

  • Selenium:在同一选项卡中打开链接

    我通过 Selenium webdriver 单击链接 该链接将打开一个新窗口 我想强制该链接在同一窗口 和同一选项卡 中打开 这可能吗 大多数时候 这种情况不仅仅发生在特定链接上 Thanks 在单击链接之前更新链接的target财产给s
  • 奇怪的 toCharArray() 行为

    我正在尝试toCharArray 并发现一些奇怪的行为 Suppose private static final char HEX CHARS 0123456789abcdef toCharArray System out println
  • Haskell 中快速随机生成器的好选择

    我有一个用例 我想测试一些赌博游戏的程序 我需要的随机数应该在一个非常小的区域 1到9 并且不需要真正的质量 我发现 Haskell 的标准生成器对我来说太慢了 所以有人有更好的想法吗 The 梅森随机纯64包裹非常快 原样MWC 随机
  • 如何使用 bot builder sdk v4 中的中间件区分 Bot 到用户和用户到 Bot 消息?

    我在 sdk V4 Bot 中实现了一个中间件来拦截 bot 和用户之间的每条消息并记录自定义 mongo Db 我正在尝试为使用 SDK v4 构建的 Bot 实现类似的概念 看起来我可以使用以下代码来添加中间件 但是不确定如何区分机器人
  • 如何在 swift 中设置 NSUserDefault 中的字典?

    我有一个可变字典 以 Int Int 的形式 并希望保存它 我会像这样使用 NSUserDefaults var myDic NSMutableDictionary myDic 1 2 NSUserDefaults standardUser
  • 如果产品价格高于 Woocommerce 中的特定金额,请在产品价格前添加文本

    在 Woocommerce 中我尝试添加文本before价格如果高于 59 欧元 我尝试了以下代码 以及其他代码 但它们不起作用 add filter woocommerce get price html custom price mess
  • 错误 C2446:==:没有从 const char * 到 TCHAR * 的转换

    我有一个 TCHAR 定义如下 TCHAR szProcessName MAX PATH TEXT
  • “纯虚函数调用”消息框

    我的一个 C Winforms 应用程序随机显示一个 纯虚函数调用 消息框 当我单击该消息框的确定按钮时应用程序立即关闭 我在应用程序日志文件中找不到任何异常 并且事件日志为空 谁能告诉我这次崩溃的可能原因以及如何进一步分析问题的根本原因
  • 如何用 ImageIcon 完全填充 JButton 的表面?

    我尝试用 ImageIcon 完全填充 Jbutton 的 表面 到目前为止我的结果是 正如您所看到的 退出 标签的边缘和按钮的边缘之间仍然存在一些空间 您可以看到背景上有白蓝色填充的按钮 我想要的是用标签完全覆盖这个按钮 有没有办法做到这
  • 如何使 For 循环处理非整数

    以下代码很简单并且输出符合预期 CODE Option Explicit Sub Test loop2 Dim i As Long For i 3 To 3 Step 1 Debug Print i Next i End Sub OUTPU
  • 如何使用母版从 asp:content 页面访问母版页上的用户控件?

    我不断收到 让我成为一个做 xyz 的工具 的请求web app我们正在准备 因此 在第三次之后 我意识到将它们全部放在一起并使用母版页会更容易 我有一个名为 MessageCenter 的用户控件 用于显示错误 成功和参考消息 因此我将其
  • 无需清除即可重新喷漆

    我正在开发一个模仿 Paint 的程序 问题是当我绘制新形状时 以前的形状会被删除 我试图注释掉我对paintComponents的超级调用 它可以工作 但留下了太多的绘图 import java awt Color import java
  • Jersey Multipart - 缺少起始边界

    我有一个带有 Netty 的 jersy 2 13 服务器应用程序 我尝试上传带有 multipart form data 的文件 但出现此错误 错误信息 7605 10 01 49 309 child group 3 1 org jvne
  • SQL自动增量id具有重复值和多列主键?

    CREATE TABLE Apps id int NOT NULL company varChar 20 NOT NULL name varChar 20 NOT NULL CONSTRAINT company app id PRIMARY
  • Go 中的通用哈希图

    我正在尝试制作一个包装纸map输入以便我可以添加一些方法 例如contains 这几乎让我怀念Java 但是 我不知道我是否可以在Java中做类似泛型的事情 虽然我读过的几乎所有内容都说 Go 没有泛型类型 但肯定有一种更好的方法 而不是为
  • 如何仅使用私钥文件创建java密钥库?

    我只有一个私钥作为 key 文件 没有其他 crt 或 ca 内容 我需要用它创建一个 java 密钥库 如何转换呢 到目前为止我尝试过的 我将 key 文件重命名为 pem 我使用 openssl 从 pem 中创建了 p12 文件 最后
  • 使用 Gnome-Shell JS 接口获取联系人列表

    我刚刚开始摆弄编写 gnome shell 扩展 并且想知道如何获取用户的联系人列表 我已经找到了一些可能的文件 gnome shell js ui contactDisplay js and gnome shell src shell c
  • 将命令输出解析为变量 LIVE(网络流量监控)

    我正在用 bash 编写一个网络监控脚本 我使用的基本命令是ettercap T M ARP i en1 然后我用管道egrep color Host GET 进去 我得到的示例输出如下所示 GET images srpr logo11w
  • 如何比较sql中的长文本和日期值?

    我以 dd mm yyyy 格式存储日期值作为长文本 我需要将此值与CURDATE 在一个SELECT陈述 请不要问我为什么要以长文本形式保存 有什么办法可以做到吗 这段代码当然不起作用 但它说明了我想要做的事情 WHERE longtex
  • UWP 尝试使用附加的依赖属性对滚动查看器进行动画处理

    我正在尝试在 UWP 中对滚动查看器的水平偏移进行动画处理 但动画目标未识别附加属性