在我的Page.Resources中,我有DataTamplate:
<DataTemplate x:Key="gridviewQuestStyle">
<Button Content="{Binding QuestNumb}" Style="{StaticResource buttonQuestStyle}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="questionStates">
<VisualState x:Name="Right">
<Storyboard>
<ColorAnimation Storyboard.TargetName="BackgroundBrush" Storyboard.TargetProperty="Color" To="LightGreen" />
</Storyboard>
</VisualState>
<VisualState x:Name="Wrong">
<Storyboard>
<ColorAnimation Storyboard.TargetName="BackgroundBrush" Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Button.Background>
<SolidColorBrush x:Name="BackgroundBrush" Color="Black"/>
</Button.Background>
</Button>
</DataTemplate>
然后我创建了GridView:
<GridView Grid.Row="0" x:Name="GridView_ButtonsQuest"
ItemTemplate="{StaticResource gridviewQuestStyle}"
ItemsSource="{Binding Questions}" >
</GridView>
问题是一个清单:
public class Question
{
public string QuestNumb { get; set; }
public string QuestText { get; set; }
}
我的申请逻辑是:
if(isAnswerRight)
{
VisualStateManager.GoToState(???, "Right", false);
}
else
{
VisualStateManager.GoToState(???, "Wrong", false);
}
请解释一下GoToState方法中第一个参数需要什么?
答案 0 :(得分:1)
如果VisualState Switch出现在.cs文件中,用于Page或UserControl(不在MVVM视图模型中)。将名称属性应用于GridView
<GridView Grid.Row="0" x:Name="GridView_ButtonsQuest"
ItemTemplate="{StaticResource gridviewQuestStyle}"
ItemsSource="{Binding Questions}"
x:Name="myStateChanges" >
</GridView>
然后将其粘贴在GoToState()方法中。
if(isAnswerRight)
{
VisualStateManager.GoToState(this.myStateChanges, "Right", false);
}
else
{
VisualStateManager.GoToState(this.myStateChanges, "Wrong", false);
}
答案 1 :(得分:1)
与Listview有同样的问题。可以使用ItemContainerGenerator和VisualTreeHelper
访问模板内的Controlforeach (var item in GridView_ButtonsQuest.Items)
{
var gridItem = (GridViewItem)MyList.ItemContainerGenerator.ContainerFromItem(item);
var wrap1 =VisualTreeHelper.GetChild(gridItem , 0);
var wrap2 = VisualTreeHelper.GetChild(wrap1 , 0);
...
我使用xmalspy来找出控件包含多少层。应该可以构建一些执行此递归的操作。
我遇到的另一个问题是你不能将GoToState与网格或按钮一起使用。但有人花了时间来开发支持它的ExtendedVisualStateManager,请参阅http://social.msdn.microsoft.com/Forums/en-GB/winappswithcsharp/thread/24dc19ff-15ed-4170-b3c3-d313728b642b
然后你可以编写ExtendedVisualStateManager.GoToElementState(...)