UWP - 动态更改按钮 VisualState
UWP - Change Button VisualState dynamically
我正在尝试动态更改按下按钮的背景。但是我无法从后面的代码访问这个 属性 。
根据按钮的基本样式,我试图获取 ControlTemplate(通过 TemplateProperty),但没有方法可以从中检索它包含的 Grid(RootGrid)。
所以我尝试像这样获取 VisualStateGroup:
var visualStateGroups = VisualStateManager.GetVisualStateGroups(testButton);
但是这个 returns 无效。
感谢您的帮助。
塞缪尔
要检索Button
中包含的Grid
,可以使用方法:
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];
我正在尝试动态更改按下按钮的背景。但是我无法从后面的代码访问这个 属性 。 根据按钮的基本样式,我试图获取 ControlTemplate(通过 TemplateProperty),但没有方法可以从中检索它包含的 Grid(RootGrid)。 所以我尝试像这样获取 VisualStateGroup:
var visualStateGroups = VisualStateManager.GetVisualStateGroups(testButton);
但是这个 returns 无效。
感谢您的帮助。
塞缪尔
要检索Button
中包含的Grid
,可以使用方法:
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];