我有一个带有MainPage.xaml的通用Windows应用程序,它具有以下代码。 VisualStateManager的GoToState无法正常工作。没有任何事情发生。
public MainPage()
{
...
VisualStateManager.GoToState(BottomToolBar.WifiButton, "Checked", false);
}
BottomToolBar是一个用户控件,它有一个带有x:Name =“WifiBtn”的ToggleButton。以下是此用户控件的代码隐藏:
public sealed partial class BottomToolBar : UserControl
{
public BottomToolBar()
{
this.InitializeComponent();
}
private void WifiBtn_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
var parentPage = GetParentsPage(this);
if(parentPage != null)
{
parentPage.MapItemsManager.ToggleActivate(MapItemsType.ISF);
}
}
public ContentControl WifiButton
{
get
{
return WifiBtn;
}
}
...
}
如你所见,我有一个名为WifiButton的公共属性,它返回一个ContentControl(你不能返回一个ToggleButton)。
在App.xaml中,我有一个应用程序资源,用于设置ToggleButton的样式,VisualState“Checked”会更改ToggleButton的不透明度。类似的东西:
<Application.Resources>
<Style x:Key="BottomToggleButtonStyle" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid x:Name="RootGrid" Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Checked">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="RootGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="1"/>
</ObjectAnimationUsingKeyFrames>
<PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/>
</Storyboard>
</VisualState>
我认为我已经掌握了一切可以让GoToState调用的工作。目标是在应用程序启动时将切换按钮的不透明度初始化为0.5。换句话说,在MainPage构造函数中。但是当我运行应用程序时,不设置不透明度。这条线似乎完全被忽略了。 我在SO中找到了其他类似的线程,同样的问题但几乎没有答案。
答案 0 :(得分:1)
为了使VisualStateManager工作,你应该等到页面被加载,所以我在页面构造函数中添加了以下内容并且有效:
this.Loaded += (s, e) =>
{
VisualStateManager.GoToState(BottomToolBar.WifiButton, "Checked", false);
};