WPF 选取框文本动画

2023-11-29

我可以滚动文本TranslateTransform但是当动画接近完成时我希望它再次开始。像蛇一样:)

这就是我所拥有的:

<StackPanel Orientation="Horizontal" Margin="0,0,0,0">
    <StackPanel.RenderTransform>
        <TranslateTransform x:Name="transferCurreny" X="-40"/>
    </StackPanel.RenderTransform>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="StackPanel.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation From="0" To="-900" Duration="00:00:10"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferCurreny"
                      RepeatBehavior="Forever"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </StackPanel.Triggers>
    <TextBlock FontSize="25"  x:Name="txtKron" Margin="10,0,7,0"/>
</StackPanel>

这就是我想要的:

enter image description here


像这样的事情应该可以解决问题。

您可以添加一个Canvas to the StackPanel with 2 TextBlocks一组设置为位置 0,一组设置为ActualWidth of the StackPanel,那么当第一个文本块离开屏幕时,另一个文本块将进入视图。

我使用的原因Canvas是因为Canvas是唯一真正支持的元素ClipToBounds="false"这允许第二个TextBlock即使放置在边界之外也是可见的Canvas itself

我们还需要一个IValueConverter如果您想从右向左滚动,则可以获得正确的负值。

我还添加了事件触发器SizeChanged因此,如果调整窗口大小,动画值将正确更新。

Code:

namespace WpfApplication9
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }
    }

    public class NegatingConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is double)
            {
                return -((double)value);
            }
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is double)
            {
                return +(double)value;
            }
            return value;
        }
    }
}

Xaml:

<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication9"
        Title="MainWindow" Height="83" Width="222" Name="UI" Tag="Tol Level">
    <StackPanel Orientation="Horizontal" x:Name="stack">
        <StackPanel.Resources>
            <local:NegatingConverter x:Key="NegatingConverter" />
            <Storyboard x:Key="slide">
                <DoubleAnimation From="0" To="{Binding Width, ElementName=canvas, Converter={StaticResource NegatingConverter}}" Duration="00:00:10"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferCurreny"
                      RepeatBehavior="Forever"/>
            </Storyboard>
        </StackPanel.Resources>
        <StackPanel.RenderTransform>
            <TranslateTransform x:Name="transferCurreny" X="0"/>
        </StackPanel.RenderTransform>
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="StackPanel.Loaded">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
            <EventTrigger RoutedEvent="StackPanel.SizeChanged">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
        </StackPanel.Triggers>
        <Canvas x:Name="canvas" Width="{Binding ActualWidth, ElementName=stack}">
            <TextBlock Text="StackOverflow" FontSize="25"  x:Name="txtKron" Canvas.Left="0"/>
            <TextBlock Text="{Binding Text, ElementName=txtKron}" FontSize="25" Canvas.Left="{Binding Width, ElementName=canvas}"/>
        </Canvas>
    </StackPanel>
</Window>

Result:

enter image description here enter image description here

Edit:左到右

 <StackPanel Orientation="Horizontal" x:Name="stack">
        <StackPanel.Resources>
            <local:NegatingConverter x:Key="NegatingConverter" />
            <Storyboard x:Key="slide">
                <DoubleAnimation From="0" To="{Binding Width, ElementName=canvas}" Duration="00:00:10"
                      Storyboard.TargetProperty="X"
                      Storyboard.TargetName="transferCurreny"
                      RepeatBehavior="Forever"/>
            </Storyboard>
        </StackPanel.Resources>
        <StackPanel.RenderTransform>
            <TranslateTransform x:Name="transferCurreny" X="0"/>
        </StackPanel.RenderTransform>
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="StackPanel.Loaded">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
            <EventTrigger RoutedEvent="StackPanel.SizeChanged">
                <BeginStoryboard Storyboard="{StaticResource slide}" />
            </EventTrigger>
        </StackPanel.Triggers>
        <Canvas x:Name="canvas" Width="{Binding ActualWidth, ElementName=stack}">
            <TextBlock Text="StackOverflow" FontSize="25"  x:Name="txtKron" Canvas.Left="0"/>
            <TextBlock Text="{Binding Text, ElementName=txtKron}" FontSize="25" Canvas.Left="{Binding Width, ElementName=canvas, Converter={StaticResource NegatingConverter}}"/>
        </Canvas>
    </StackPanel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 选取框文本动画 的相关文章

随机推荐

  • Java - 如何检查另一个(非 Java)进程是否正在 Linux 上运行

    我遇到了一些奇怪的问题 我们正在使用 Xvfb 虚拟桌面管理器 并希望在继续之前确保它正在运行 使用纯 shell 我可以轻松做到这一点 ps ef grep Xvfb grep v grep 这正是我所需要的 一行包含有关 Xvfb 过程
  • 如何进一步处理导致 Ruby FasterCSV 库抛出 MalformedCSVError 的数据行?

    传入数据文件包含格式错误的 CSV 数据 例如非转义引号 以及 有效 CSV 数据 例如包含换行符的字段 如果检测到 CSV 格式错误 我想对该数据使用替代例程 使用以下示例代码 为简单起见进行了缩写 FasterCSV open file
  • 应该避免使用 DataFrame 函数 groupBy 吗?

    This link and others告诉我火花groupByKey如果有大量键 则不要使用 因为 Spark 会打乱所有键 这同样适用于groupBy功能也一样 或者这是不同的东西 我问这个是因为我想做这个问题尝试这样做 但我有大量的钥
  • Win7和Win XP关机前运行程序

    我知道有关于此的线程 我找到了这个 如何安排任务在关闭窗口时运行但这对我来说失败了 我在 LabView 中编写了一个小程序并用它制作了一个 exe 当我在正常的 Windows 操作中双击 exe 时 它 运行完美 只需几秒钟即可完成 然
  • #include 文件指令不起作用

    所以我需要照顾这个新网站 http www kineformeconcept com mtl index shtml 自从客户端移动到托管位置后 菜单就不再显示 我从未使用过 include file whatever html 指令 我现
  • 在 C# 中使用 RotateFlip 旋转图像

    我有这段代码用于在 C Windows 窗体应用程序中的 if 循环中旋转图像 但窗体在窗体输出中不显示任何内容 有人可以帮忙吗 this splitContainer1 Panel2 Controls Add PictureBox1 Pi
  • 在Python中分割列表

    我正在用 Python 编写一个解析器 我已将输入字符串转换为标记列表 例如 2 x 3 1 4 3 x 2 我希望能够将列表拆分为多个列表 例如str split 功能 但似乎没有办法做到my list split 有任何想法吗 Than
  • ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

    基本上 我有一个表 其中包含一家公司的一些属性 这是 主 表 它们的 ID 用于许多其他表 我基本上是通过这个方法找到他们的ID private Company currentcompany Company cuco db Companie
  • Magento Catalog_category_flat_store_1 不存在

    我有一个运行 Magento CE 1 7 的现有商店 突然从今天早上开始 没有任何代码更新 我收到以下错误 a 5 i 0 s 111 SQLSTATE 42S02 未找到基表或视图 1146 表 XXXXXX catalog categ
  • 如何应用TextBox控件模板?

    我正在尝试简化一些代码并提高可维护性 我最初正在寻找一种使文本框向左对齐的方法 它可以收缩和扩展到最大值 而无需在达到最大值后在网格单元内居中 所以我开始编写一些这样的代码
  • preload.php 文件在哪里?它是如何生成的?

    对于 Symfony 5 1 和 PHP 7 4 我想添加preload php在opcache中 Symfony 文档 在容器编译期间 例如 运行cache clear命令时 Symfony 在 config 目录中生成一个名为 prel
  • 如何将表列(通过 SQL 查询返回)作为 CheckedListBox 中的项目列出?

    如果我有下表 canAssign 1 有没有办法添加列标题文本 例如 canAssign等 到CheckedListBox作为用户可以检查的标签 我找到的所有答案都列出了value作为标签 像这样 1 而不是这个 canAssign 仅作为
  • 如何将 MKV 字节读取为视频?

    我正在接收 MKV 视频片段 以字节为单位 我需要获取它的第一帧以供以后处理 而不将视频保存在磁盘中 对于类似的图像问题 我使用 OpenCV 或 PIL 一切正常 但是 我无法对视频数据执行相同的操作 有什么技巧可以帮助我将视频从字节读取
  • Python 的 subprocess shell=True 属性在 Java 中的等价物是什么?

    我已经使用Python很长时间了 python 的系统和子进程方法可以采用 shell True 属性来生成设置环境变量的中间进程 在命令运行之前 我一直在使用 Java 来回使用 Runtime exec 来执行 shell 命令 Run
  • MSAL UserAgentApplication:本地存储不工作

    UserAgentApplication localCache localStorage 不起作用 重现步骤 var client new Msal UserAgentApplication config aadClientId confi
  • 在 Swift 中使用 Regex 进行简单搜索时,如何避免由于搜索字符串中的特殊字符而导致的错误?

    我正在使用正则表达式在文本视图中搜索单词 我实现了一个文本字段和两个开关作为选项 全字和匹配大小写 当您在搜索字段中输入普通单词时 一切正常 但当我输入 或 等特殊字符时 我会收到错误 我得到的错误是这样的 Error Domain NSC
  • 游戏中心邀请立即失败

    我们在发送邀请时遇到问题GKGameCenterViewController 视图控制器打开得很好 但是当我们尝试向某人发送邀请时 它立即失败 两个帐户都启用了游戏中心邀请并通过GKGameViewController工作正常 这是我们用来
  • 使用 VBA 将 JSON 解析为 Excel

    我在 VBA 中解析 JSON 数据时遇到一些问题 我已经尝试了网上的所有示例 但仍然无法解决问题 我设法做的是使用另一个从另一个网站提取数据的 VBA 代码将 JSON 数据以原始格式提取到 Excel 中 我粘贴了下面有效的代码 它不是
  • 如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?

    我在一些自动化测试中使用 git 作为一种在 Linux 和 Windows 上使用相同语法的 diff 命令的简单方法 它工作正常 但由于我正在比较的文件位于共享驱动器上 我一直在偶然发现文件模式的差异被 不必要地 报告为更改 我环顾四周
  • WPF 选取框文本动画

    我可以滚动文本TranslateTransform但是当动画接近完成时我希望它再次开始 像蛇一样 这就是我所拥有的