【问题标题】:VisualStateManager.GoToState returns false and Visual State is not changedVisualStateManager.GoToState 返回 false 且 Visual State 未更改
【发布时间】:2013-12-11 01:18:43
【问题描述】:

我有这个 XAML 代码:

       <Button x:Name="btnStartRecord" Visibility="Collapsed">
            <Button.BorderBrush>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="Black" Offset="0"/>
                    <GradientStop Color="#FFF3883E" Offset="1"/>
                </LinearGradientBrush>
            </Button.BorderBrush>
        </Button>
        <Button x:Name="btnStopRecord" Visibility="Collapsed">
            <Button.BorderBrush>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="Black" Offset="0"/>
                    <GradientStop Color="#FFF3883E" Offset="1"/>
                </LinearGradientBrush>
            </Button.BorderBrush>
        </Button>

<VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="MainStates">
                <VisualState x:Name="RecordIconState">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStartRecord" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
                            <!--<DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>-->
                        </ObjectAnimationUsingKeyFrames>
                        <!--<ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStopRecord" Storyboard.TargetProperty="Visibility">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                        </ObjectAnimationUsingKeyFrames>-->
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="StopRecordIconState">
                    <Storyboard>
                        <!--<ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStartRecord" Storyboard.TargetProperty="Visibility">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                        </ObjectAnimationUsingKeyFrames>-->
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="btnStopRecord" Storyboard.TargetProperty="Visibility">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                </VisualStateGroup>                
        </VisualStateManager.VisualStateGroups>

在代码后面,我在 OnLoad/Constructor 中调用以下函数:

private void SwitchRecordButtonContent()
    {
        {
            if (m_bRecording)
            {
                //btnStartStopRecord.Content = "StopRecord";
                VisualStateManager.GoToState(this, StopRecordIconState.Name, false);
                VisualState currentState = MainStates.CurrentState;
                Visibility temp = btnStartRecord.Visibility;
            }
            else
            {
                //btnStartStopRecord.Content = "StartRecord";
                bool op = VisualStateManager.GoToState((Button)this.btnStartRecord, RecordIconState.Name, false); // I get this always false
                VisualState currentState = MainStates.CurrentState;
                Visibility temp = btnStartRecord.Visibility;
            }
        }
    }

但我没有看到视觉状态发生变化,我不知道为什么:(

是不是我做错了什么?

【问题讨论】:

  • VSM 是否附加到根元素?
  • 是的,在 xaml 代码上方的网格中。
  • @atomaras 非常感谢。尽管 VAM 已附加到我的上下文的根目录,但它周围还有额外的 Grid。我试着把它连接到那个上,它奏效了!伟大的!!非常感谢:)

标签: c# windows-store-apps winrt-xaml windows-8.1 visualstatemanager


【解决方案1】:

你在打电话

VisualStateManager.GoToState((Button)this.btnStartRecord, RecordIconState.Name, false); // I get this always false

但根据您的简短浏览,您应该打电话给

VisualStateManager.GoToState(this, RecordIconState.Name, false);

【讨论】:

  • 顺便说一句,我喜欢在转换到该状态时获取一个命名状态的名称的想法。你从哪里得到那个的?我也需要开始做。
  • 嗨菲利普,我尝试了两种方式。如果你看到了,在 IF 部分我尝试发送“this”但它没有用。所以我尝试了按钮也不起作用。以我为自己的方便使用的那种风格命名。代码太大了,所以为了简化在编写几天后得到它到底在做什么,我使用了它。很高兴你喜欢它。很多人不喜欢它 :) 顺便说一句,如果您找到解决问题的任何其他方法,请告诉我。谢谢:)
【解决方案2】:

正如上面评论中提到的那样,将代码移动到用户控件的根目录 它奏效了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2018-08-06
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多