UWP - 动态更改按钮VisualState

时间:2017-03-13 08:35:37

标签: uwp code-behind visualstatemanager visualstates visualstategroup

我正在尝试动态更改按钮按下的背景。但我无法从后面的代码访问此属性。 根据按钮的基本样式,我试图获取ControlTemplate(通过TemplateProperty)但是没有方法来检索它包含的Grid(RootGrid)。 所以我试着像这样得到VisualStateGroup:

var visualStateGroups = VisualStateManager.GetVisualStateGroups(testButton);

但是这会返回null。

感谢您的帮助。

塞缪尔

1 个答案:

答案 0 :(得分:1)

要检索Grid中包含的Button,您可以使用以下方法:

    private TChild FindVisualChild<TChild>(DependencyObject obj)where TChild : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(obj, i);
            if (child != null && child is TChild)
                return (TChild)child;
            else
            {
                TChild childOfChild = FindVisualChild<TChild>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
        }
        return null;
    }

然后使用这样的方法:

var grid = FindVisualChild<Grid>(this.test);
var group = VisualStateManager.GetVisualStateGroups(grid)[0];