gpt4 book ai didi

wpf - 在 XAML 中定义和启动的 Storyboard 上的 GetCurrentState

转载 作者:行者123 更新时间:2023-12-04 19:14:46 24 4
gpt4 key购买 nike

我已经搜索了所有内容,似乎无法找到有关此问题的答案。我的应用程序生活在松散的 XAML 世界中,因此必须依靠 XamlReaders 和树遍历来查找元素。我有一个组件来处理这些 XAML 页面的呈现。该渲染器需要知道可以在加载的 XAML 上运行的 Storyboard的状态。所以我想在我的渲染器中做的是这样的: -

var resources = _currentScreenFrameworkElement.Resources;
foreach (var item in resources.Values)
{
if (item is Storyboard)
{
try
{
var storyboard = item as Storyboard;
**if (storyboard.GetCurrentState() == ClockState.Active)**

一切都很好。然而,问题是当我尝试对 CurrentState 进行 dcheck 时,它会引发异常:-
"Cannot perform action because the specified Storyboard was not applied to this object for interactive control."

环顾四周,我看到这是因为我需要使 Storyboard可控。所以我的问题是如何在 XAML 中执行此操作?我不在代码中启动 Storyboard,因此无法将 true 传递给重载的 BeginStoryboard。

最佳答案

我刚刚遇到了同样的问题,所以我想我会分享我的发现。

当您的 Storyboard未标记为可控时,您会收到该错误 .当调用 Begin 方法时, Storyboard被标记为可控。

如果您是从后面的代码中执行此操作,那么您只需使用具有此 IsControllable 的重载即可。 bool 参数 ( list of Begin overloads )。

如果您在 Xaml 中使用了 BeginAnimation 元素,那么您需要做两件事。

  • 分配一个 Name到 BeginAnimation 元素。 documentation此属性声明:“如果未指定 BeginStoryboard 的名称,则 Storyboard在开始后无法交互影响”
  • 当您尝试在代码隐藏中与 Storyboard进行交互时,您必须传递对在其中声明 BeginStoryboard 的对象的引用。

  • 这是一个向您展示第 1 步的示例(命名开始 Storyboard)
    <Button Name="btn1" Content="bla">
    <Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
    <BeginStoryboard
    Name="bnt1_beginStoryboard"
    Storyboard={StaticResource someSharedStoryboard}"/>
    </EventTrigger>
    </Button.Triggers>
    </Button>

    这是第 2 步的示例。由于您已将 beginStoryboard 命名为您的类中的局部变量,因此您可以将其用作本地变量。或者您可以直接引用实际的 Storyboard。重点是你必须传入 beginStoryboard 的所有者(在这种情况下是按钮)
    //The main point here is that we're passing in btn1
    bnt1_beginStoryboard.Storyboard.Stop(btn1);
    bnt1_beginStoryboard.Storyboard.SkipToFill(btn1);
    bnt1_beginStoryboard.Storyboard.Resume(btn1);

    以下是 Storyboard上需要您传入拥有框架元素的所有“ Action ”方法的列表: Control a Storyboard After It Starts

    关于wpf - 在 XAML 中定义和启动的 Storyboard 上的 GetCurrentState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029644/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com