2

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

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

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

<Button Click="Click" Style="{StaticResource TextButtonStyle}" Content="Page 2"/>

将函数添加到代码隐藏文件中:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
  Frame.Navigate(typeof (Page2));            
}

接下来创建另一个页面,添加按钮,然后在 Click 事件中导航回 MainPage。

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

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

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

4

1 回答 1

2

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

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));            
}
于 2012-12-19T14:20:27.150 回答