Модальное диалоговое окно всегда пропускает нажатие первой кнопки после двойного щелчка - PullRequest
0 голосов
/ 04 мая 2020

Я отображаю модальное диалоговое окно, когда пользователь дважды нажимает внутри TextBlock. Это бэкдор к скрытой панели настроек. TextBlock содержится во всплывающем окне. Я обнаружил, что всегда необходимо нажать / коснуться один раз, прежде чем какая-либо из кнопок в диалоговом окне что-либо сделает. Вид раздражает. Первоначально использовались MouseLeftButtonDown и ClickCount == 2 в TextBlock, но также пробовали DoubleClickEvent для Label и их версий Preview .... Ничто из того, что я пробовал, не решает эту проблему.

       <TextBlock Foreground="Black" FontSize="16" Grid.ColumnSpan="4" HorizontalAlignment="Center" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" VerticalAlignment="Center" Padding="0,10,0,10">
            <Run Text="{x:Static languages:Strings.SoftwareVersion}"/>
            <Run Text="{Binding SoftwareBuild}"/>
            <Run Text="      "/>
            <Run Text="{x:Static languages:Strings.FirmwareVersion}"/>
            <Run Text="{Binding FirmwareBuild}"/>
        </TextBlock>

        private void TextBlock_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            try
            {
                if (e.ClickCount == 2)
                {
                    var sw = new SettingsWindow();
                    sw.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
                    sw.DataContext = this.DataContext;
                    sw.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                ex.HandleException();
            }
        }

Я внес исправление в заголовок, поскольку проблема только в поведении касанием / касанием; первый щелчок мыши проходит только при первом касании.

Добавлен дополнительный код для окна настроек в соответствии с запросом: -

<Window x:Class="XXXXXXX.UserInterface.Views.Miscellaneous.SettingsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="SettingsWindow" Height="150" Width="200">
    <Grid>
        <Button Content="Click Me" Click="Button_Click" VerticalAlignment="Center" HorizontalAlignment="Center" Height="48" Margin="50,30,37,41" Width="105" />
    </Grid>
</Window>

    public partial class SettingsWindow : Window
    {
        public SettingsWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            (sender as Button).Background = new SolidColorBrush(Colors.Red);
            (sender as Button).Content = "WAS CLICKED";
        }
    }

Я попытался установить фокус в загрузке и активировать событие Диалог безрезультатный. Даже попытался вызвать событие MouseClick с помощью RaiseEvent.

Та же проблема, если я считаю только 1 щелчок, но одним щелчком проблема исчезнет, ​​если я посчитаю события MouseButtonUp не MouseButtonDown, но тогда я потеряю опцию ClickCount == 2 который не работает вообще. Где-то событие MouseButtonUp теряется.

Так что я собираюсь справиться со своим двойным щелчком, чтобы заставить это работать ...

, но приветствуются предложения о том, почему это происходит.

Джерри

...