UWP-动态更改按钮VisualState

UWP-动态更改按钮VisualState,uwp,code-behind,visualstatemanager,visualstates,visualstategroup,Uwp,Code Behind,Visualstatemanager,Visualstates,Visualstategroup,我正在尝试动态更改按下的按钮背景。但我无法从隐藏的代码访问此属性。 根据button的基本样式,我尝试获取ControlTemplate(通过TemplateProperty),但没有从中检索它包含的网格(RootGrid)的方法。 所以我试着让他们这样: var visualStateGroups = VisualStateManager.GetVisualStateGroups(testButton); var grid = FindVisualChild<Grid>(this

我正在尝试动态更改按下的按钮背景。但我无法从隐藏的代码访问此属性。 根据button的基本样式,我尝试获取ControlTemplate(通过TemplateProperty),但没有从中检索它包含的网格(RootGrid)的方法。 所以我试着让他们这样:

var visualStateGroups = VisualStateManager.GetVisualStateGroups(testButton);
var grid = FindVisualChild<Grid>(this.test);
var group = VisualStateManager.GetVisualStateGroups(grid)[0];
但是这个返回null

谢谢你的帮助


Samuel

要检索
按钮中包含的
网格
,可以使用以下方法:

    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;
    }
private TChild FindVisualChild(DependencyObject obj),其中TChild:DependencyObject
{
for(int i=0;i
然后使用如下方法:

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