0

DispatcherTimer を使用して、ボタンが一定時間押されたときにポップアップを開きます。これは問題なく動作しますが、StaysOpen プロパティが false に設定されていても、ポップアップは開いたままです。コードは次のとおりです。

XAML:

<Grid>
    <Button x:Name="_button" Content="open" PreviewMouseDown="Button_PreviewMouseDown" PreviewMouseUp="Button_PreviewMouseUp" Width="100" Height="50"/>
    <Popup x:Name="_popup" StaysOpen="False" Width="300" Height="300"/>
</Grid>

コードビハインド:

public partial class MainWindow : Window {

    private DispatcherTimer _dispatcherTimer;

    public MainWindow() {
        InitializeComponent();
    }

    private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e) {
        _dispatcherTimer.Stop();
    }

    private void DispatcherTimer_Tick(object sender, EventArgs e) {
        _dispatcherTimer.Stop();
        _popup.IsOpen = true;
    }

    private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e) {
        _dispatcherTimer = new DispatcherTimer();
        _dispatcherTimer.Tick += new EventHandler(DispatcherTimer_Tick);
        _dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 800);
        _dispatcherTimer.Start();
    }

}

DispatcherTimer なしでポップアップを開くと、すべてが期待どおりに機能します。私の質問は:

  • DispatcherTimer を使用して開くと、ポップアップがこのように動作するのはなぜですか?
  • これを機能させるための回避策はありますか? (ポップアップの外側をクリックすると、ポップアップは自動的に閉じます)

ありがとう!

4

0 に答える 0