在非活动选项卡上调用事件以进行控制会导致异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在非活动选项卡上调用事件以进行控制会导致异常相关的知识,希望对你有一定的参考价值。

有一个控件有动画DoubleAnimationUsingPath,动画由事件RoutedEvent =“ui:CheckBoxProgressCircle.Check”触发

<EventTrigger RoutedEvent="ui:CheckBoxProgressCircle.Check">
    <EventTrigger.Actions>
        <BeginStoryboard>
            <Storyboard>

                <DoubleAnimationUsingPath Storyboard.TargetName="AnimatedTranslateTransform"
                                            Storyboard.TargetProperty="X"
                                            PathGeometry="{StaticResource CheckAnimationPath}"
                                            Source="X"
                                            Duration="0:0:.1" />

            </Storyboard>
        </BeginStoryboard>
    </EventTrigger.Actions>
</EventTrigger>

在代码中,我注册了事件:

static CheckBoxProgressCircle()
{
    CheckEvent =
        EventManager.RegisterRoutedEvent("Check", RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(CheckBoxProgressCircle));
}

public event RoutedEventHandler Check
{
    add
    {
        AddHandler(CheckEvent, value);
    }
    remove
    {
        RemoveHandler(CheckEvent, value);
    }
}

然后我给这个事件打电话:

var newEventArgs = new RoutedEventArgs(CheckEvent);
RaiseEvent(newEventArgs);

如果控件位于处于活动状态的选项卡上,则一切正常,如果控件位于从未变为活动状态的选项卡上,则会出现错误:

''AnimatedTranslateTransform'名称在'System.Windows.Controls.ControlTemplate'的名称范围内找不到。'

我认为这是因为控件没有呈现,因为在非活动选项卡上并且没有AnimatedTranslateTransform,我如何强制wpf在选项卡变为活动之前呈现此元素?或者如果我错了,我该怎么办呢?

答案

解决方案非常简单:您可以调用ApplyTemplate()方法;对于这种控制。 https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.applytemplate.aspx

以上是关于在非活动选项卡上调用事件以进行控制会导致异常的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS MVC 控制器引用选项卡面板的活动选项卡

脚本无法在非活动选项卡上运行

以编程方式将非活动选项卡滚动到底部

单击活动选项卡的选项卡事件

Vuejs:当特定选项卡处于活动状态时是不是会发出事件(bootstrap-vue)

如果存在很多选项卡,导航选项卡会使用省略号调整宽度