VisualStateManager.GoToState在UserControl

时间:2015-08-25 14:06:57

标签: c# xaml win-universal-app

我有一个带有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中找到了其他类似的线程,同样的问题但几乎没有答案。

1 个答案:

答案 0 :(得分:1)

为了使VisualStateManager工作,你应该等到页面被加载,所以我在页面构造函数中添加了以下内容并且有效:

this.Loaded += (s, e) =>
        {
            VisualStateManager.GoToState(BottomToolBar.WifiButton, "Checked", false);
        };