是否可以处理 Windows Phone Toolkit HubTile 的视觉状态更改事件



当视觉状态更改为Flipped时,我想更改HubTile的源(图像),但是我似乎无法从Windows Phone Toolkit获得VisualStateManager.GetVisualStateGroups为HubTile控件工作。

我认为一旦我有了VisualStateGroup,我就可以处理CurrentStateChanged事件,但是我似乎无法获得该组。

我已经看到了以下线程,不幸的是它不包含代码片段:-

在 Hubtile "重置"时更改图像源

我也尝试使用VisualTreeHelper.GetChild,我认为这不是必需的。

如果您能分享一些想法,我将不胜感激?

基于以下博客文章:-

http://blogs.msdn.com/b/ptorr/archive/2010/07/23/how-to-detect-when-a-list-is-scrolling-or-not.aspx

我想出了以下内容:-

    bool alreadyHookedEvents = false;
    List<string> _images = new List<string>();
    int _index = 0;
    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        if (_images.Count == 0)
        {
            _images.Add(@"Images1.jpg");
            _images.Add(@"Images2.jpg");
            _images.Add(@"Images3.jpg");
            _images.Add(@"Images4.jpg");
            _images.Add(@"Images5.jpg");
            _images.Add(@"Images6.jpg");
            _images.Add(@"Images7.jpg");
            _images.Add(@"Images8.jpg");
            _images.Add(@"Images9.jpg");
            _images.Add(@"Images10.jpg");
            _images.Add(@"Images11.jpg");
            _images.Add(@"Images12.jpg");
        }
        if (alreadyHookedEvents)
            return;
        alreadyHookedEvents = true;
        // Visual States are always on the first child of the control template
        FrameworkElement element = VisualTreeHelper.GetChild(this.MyHubTile, 0) as FrameworkElement;
        if (element != null)
        {
            VisualStateGroup group = FindVisualState(element, "ImageStates");
            if (group != null)
            {
                group.CurrentStateChanged += (s, args) => 
                {
                    if (group.CurrentState.Name == "Flipped")
                    {
                        _index++;
                        this.MyHubTile.Source = new BitmapImage(new Uri(_images[_index], UriKind.Relative));
                    }
                };
            }
        }
    }
    VisualStateGroup FindVisualState(FrameworkElement element, string name)
    {
        if (element == null)
            return null;
        IList groups = VisualStateManager.GetVisualStateGroups(element);
        foreach (VisualStateGroup group in groups)
            if (group.Name == name)
                return group;
        return null;
    }
    T FindSimpleVisualChild<T>(DependencyObject element) where T : class
    {
        while (element != null)
        {
            if (element is T)
                return element as T;
            element = VisualTreeHelper.GetChild(element, 0);
        }
        return null;
    }

最新更新