【问题标题】:WPF play "Click" animation on button. Simulate click from codeWPF 在按钮上播放“单击”动画。从代码模拟点击
【发布时间】:2013-07-19 11:02:15
【问题描述】:

我有 10 个默认的 WPF 按钮。

在某些特定情况下,我必须从我的视图模型中模拟\播放单击按钮的动画。 (演示模式下的应用程序并向用户演示其工作原理。)

我不知道如何模仿默认按钮点击,有什么想法吗?

【问题讨论】:

  • 只调用方法?
  • @Viv 我找不到 .Click();按钮中的方法...
  • @Viv 现在我看到了。如何在没有任何特定 MVVM 库的情况下从 MVVM 触发这部分代码?我只看到一种传递委托或视图实例的方法。
  • 使用Behavior?有一个行为,它将来自 VM 的属性作为绑定到其中的 DP,然后在该 DP 的 propertyChangedCallback 上,相应地调用单击?
  • 这是否回答了您的问题?不是模拟 Click 动画您的实际问题吗? AFAIK 在按钮上调用 RaiseEvent(new RoutedEventArgs(Button.ClickEvent)) 会调用 Click 事件,但不会调用底层动画。

标签: c# .net wpf mvvm wpf-controls


【解决方案1】:

您需要 UI 自动化框架 (System.Windows.Automation) 才能通过代码单击按钮。

var element = AutomationElement.RootElement.FindFirst(
                TreeScope.Descendants,
                new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button), new PropertyCondition(AutomationElement.NameProperty, "Start", PropertyConditionFlags.IgnoreCase))
            );
var pattern = (InvokePattern)element.GetCurrentPattern(InvokePattern.Pattern);
pattern.Invoke();

此代码将单击您的 WPF 应用程序的 Windows 开始按钮。您可以用同样的方式在您的应用中搜索按钮。

需要参考:UIAutomationClient、UIAutomationTypes

【讨论】:

    【解决方案2】:

    如果我明白你想要什么。您可以为所有按钮设置默认样式:

    <Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <Trigger Property="Button.IsPressed" Value="True">
                <Trigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            ...
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.ExitActions>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 然后我可以将 IsPressed 属性绑定到我的视图模型以从代码中调用此动画?
    • 我没有看到公共属性 IsPressed。
    • 尝试将Button.IsPressed改为IsPressed
    • 基本上尝试在网络上找到一些有效的触发器。我的答案应该只包含&lt;Style TargetType="{x:Type Button}"&gt; 部分,因为这是您为Button 控件设置默认样式所需要的
    • 看起来这是我不能使用的东西。我想为我的视图模型中的任何按钮触发默认点击。
    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2013-08-29
    • 2011-06-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多