0

私のグループは、学校向けの表面プロジェクトを開発していますが、私たちは皆、この技術にまったく慣れていません。状況は次のとおりです。

4 つのサーフェス ボタンがあるページがあります。ユーザーがサーフェス ボタンの 1 つをクリックまたはタップすると、ポップアップ イメージが表示されます。このアプリはマルチユーザー環境向けに作られているため、別のユーザーが同じボタンをタップすると、同じ画像の別のポップアップが表示されます。ユーザーが画像を見終わったときにポップアップを閉じるために、各ポップアップに閉じるボタンがあります。

ボタンがクリックされるたびに、キャンバス、グリッド、ScatterViewItem、および各 ScatterViewItem のボタンが作成されます。

私が今抱えている問題は、各 ScatterViewItem の閉じるボタンでポップアップを閉じることができることです。ただし、ポップアップが 1 つだけの場合にのみ機能します。複数のポップアップがある場合、ボタンは最後のポップアップのみを閉じます。誰か提案はありますか?本当に感謝 。前もって感謝します

以下はコードです:

private void btn1_Click(object sender, RoutedEventArgs e)
        {

            Image imageControl = new Image();
            Grid grid = new Grid();

            // changing to popup from image control

            Canvas cv1 = new Canvas();
            cv1.ClipToBounds = true;
            cv1.Width = 350;
            cv1.Height = 350;
            cv1.SetValue(Canvas.BackgroundProperty, new SolidColorBrush(Colors.Transparent));

            Image imageControl1 = new Image();
            var myBitmapImage1 = new BitmapImage();
            myBitmapImage1.BeginInit();
            myBitmapImage1.UriSource = new Uri("/Images/btn1.jpg", UriKind.Relative);
            myBitmapImage1.EndInit();
            imageControl1.Source = myBitmapImage1;
            imageControl1.Width = 250;
            imageControl1.Height = 250;

            Button sb1 = new Button();
            sb1.Content = "Close";
            sb1.Width = 40;
            sb1.Height = 40;

            imageControl1.SetValue(Canvas.TopProperty, -40.0);

            sb1.SetValue(Canvas.LeftProperty, 180.0);
            sb1.SetValue(Canvas.TopProperty, 2.0);
            sb1.Click +=new RoutedEventHandler(Close_Click);

            cv1.Children.Add(imageControl1);
            cv1.Children.Add(sb1);
            grid.Children.Add(cv1);

            App.svi = new ScatterViewItem();

            App.svi.Content = grid;
          sv.Items.Add(App.svi);

         App. svi.Visibility = System.Windows.Visibility.Visible;
            Surfaceapp1.Show();


        }

   public void Close_Click(object sender, RoutedEventArgs e)
        {
            Button srcButton = e.Source as Button;

      App.svi.Visibility = System.Windows.Visibility.Collapsed;

        }
4

1 に答える 1

0

表示する各「ポップアップ」(ScatterView) は、表面上の一意のオブジェクトです。したがって、1 つを閉じても、作成した他の ScatterView とは関係ありません。それらをすべて閉じたい場合、できることはいくつかあります。

表面に保持できる ScatterView は 1 つだけです。それへの参照を保持することができ、ボタンが 2 回目にクリックされたときに、元の ScatterView をアニメーション化して注意を引くトリガー イベントになる可能性があります。(あなたもそれに焦点を当てることを確認してください)

もう 1 つのアプローチは、ロジックを維持することですが、作成する各コントロールのリストを作成します。そうすれば、close イベントを取得したら、そのリストに移動し、リスト内の各インスタンスで close を呼び出します。当然、各リストはフォーム上の各ボタンに間接的に関連付けられます。フックを各 ScatterView の Closing イベントに配置して、そのうちの 1 つがいつ閉じられるかを知ることができます。テーブルに複数のオブジェクトがあるため、複数のクリックが発生する可能性があることも想定する必要があるため、リスト全体を閉じる処理を行うときにロジック スレッド セーフにする必要があります。

于 2012-07-06T16:18:09.863 に答える