![](/img/trans.png)
[英]UWP VisualStateManager.GoToState Always Returns False
[英]VisualStateManager.GoToState returns false and Visual State is not changed
我有这个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;
}
}
}
但是我看不到视觉状态的变化,也无法弄清楚为什么:(
我做错了什么吗?
你在打电话
VisualStateManager.GoToState((Button)this.btnStartRecord, RecordIconState.Name, false); // I get this always false
但基于一瞥,您应该打电话给
VisualStateManager.GoToState(this, RecordIconState.Name, false);
就像上面评论中提到的atomaras一样,将代码移到了usercontrol的根目录,并且可以正常工作:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.