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"ます。便宜上、ボタンの 1 つを左揃えに、もう 1 つを右揃えに設定します。

アプリを実行します。ボタンの上にマウスを移動します。これを反映して状態が変化します。ボタンをクリックします。また色が変わります。2 ページ目で、同じ操作を行います。最初のページに戻ると、ボタンで PointerExited イベントが呼び出されなかったため、ボタンはまだ「PointerOver」の視覚状態にあります。

どうすればこれを修正できますか? 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 に答える