C# Windows 8-缓存分页按钮视觉状态在返回时未更改

C# Windows 8-缓存分页按钮视觉状态在返回时未更改,c#,xaml,windows-store,C#,Xaml,Windows Store,我有个小问题(但很烦人)。 您可以通过执行以下操作快速复制它: 新项目>Windows应用商店>空白应用(XAML) 在网格中添加一个按钮。这也适用于默认样式。(注意:TextButtonStyle是在SimpleStyles.xaml中定义的) 接下来创建另一个页面,添加按钮,并在单击事件中导航回主页面 在两个页面上的下一个设置添加NavigationCacheMode=“Enabled”。为方便起见,将其中一个按钮设置为左对齐,另一个按钮设置为右对齐 运行应用程序。将鼠标移到按钮上。状态更改

我有个小问题(但很烦人)。 您可以通过执行以下操作快速复制它:

新项目>Windows应用商店>空白应用(XAML)

在网格中添加一个按钮。这也适用于默认样式。(注意:TextButtonStyle是在SimpleStyles.xaml中定义的)

接下来创建另一个页面,添加按钮,并在单击事件中导航回主页面

在两个页面上的下一个设置添加
NavigationCacheMode=“Enabled”
。为方便起见,将其中一个按钮设置为左对齐,另一个按钮设置为右对齐

运行应用程序。将鼠标移到按钮上。状态更改以反映这一点。点击按钮。颜色又变了。在第二页,做同样的事情。返回到第一页时,按钮仍处于“PointerOver”视觉状态,因为按钮上没有调用PointerExit事件


我怎样才能解决这个问题?VisualStateManager.gostate()不起作用。

我们遇到了类似的问题。我们注意到,当您隐藏控件时,状态会“重置”。 我们用肮脏的方式解决了它:

void GridView_ItemClick(object sender, ItemClickEventArgs e)
{
    var ctrl = this.ItemContainerGenerator.ContainerFromItem(e.ClickedItem);
    ((Control)ctrl).Visibility = Visibility.Collapsed;
    ((Control)ctrl).Visibility = Visibility.Visible;
}
也许您可以尝试执行以下操作(未测试此操作):

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
  Frame.Navigate(typeof (Page2));            
}
void GridView_ItemClick(object sender, ItemClickEventArgs e)
{
    var ctrl = this.ItemContainerGenerator.ContainerFromItem(e.ClickedItem);
    ((Control)ctrl).Visibility = Visibility.Collapsed;
    ((Control)ctrl).Visibility = Visibility.Visible;
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    ((Control)sender).Visibility = Visibility.Collapsed;
    ((Control)sender).Visibility = Visibility.Visible;
    Frame.Navigate(typeof (Page2));            
}