Элементы управления вне контекстного меню не попадают в один клик при открытом контекстном меню - PullRequest
0 голосов
/ 04 мая 2018

У меня есть кнопка, нажатие на которую открывает контекстное меню. У меня есть другая кнопка на той же панели стека, когда контекстное меню открывается нажатием кнопки 2, нажатие на кнопку 1 не запускает событие кнопки 1 в первый раз, но когда производится еще один щелчок, событие запускается. Проще говоря, мне требуется 2 щелчка, чтобы вызвать событие кнопки 1 в моем окне, когда открыто контекстное меню кнопки 2.

Вот код для большего понимания:

MainWindow.xaml

<Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">  
        <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions> 
<StackPanel Grid.Row = "0" Orientation="Horizontal">
       <Button x:Name= "btnOne" Click="btnOneClick"/>  
       <Button x:Name="btnTwo" 
                            RenderOptions.BitmapScalingMode="HighQuality" Cursor="Hand"  ContextMenuService.IsEnabled="False" Click="btnTwoClick">
                        <Button.Triggers>
                            <EventTrigger RoutedEvent="Button.Click">
                                <EventTrigger.Actions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <BooleanAnimationUsingKeyFrames 
                                 Storyboard.TargetName="MyContextMenu" 
                                 Storyboard.TargetProperty="IsOpen">
                                                <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True" />
                                            </BooleanAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger.Actions>
                            </EventTrigger>
                        </Button.Triggers>
                        <StackPanel>
                            <StackPanel  Height="{Binding ActualHeight, ElementName=btnTwo}" Orientation="Horizontal" HorizontalAlignment="Right" >
                                <TextBlock  HorizontalAlignment="Right" Text="Click Me" ></TextBlock>                         
                            </StackPanel>                            
                        </StackPanel>
                        <Button.ContextMenu>
                            <ContextMenu x:Name="MyContextMenu"  StaysOpen="False"  Width="200" MaxHeight="258"
                                         BorderBrush="Gray" BorderThickness="1,0,1,1" Closed="MyContextMenuClosed">
                                <MenuItem Header="MenuOne" StaysOpenOnClick="True" Cursor="Arrow"/>
                                <MenuItem Header="MenuTwo" StaysOpenOnClick="True" Cursor="Arrow"/>                                                               
                            </ContextMenu>
                        </Button.ContextMenu>
                    </Button>
</StackPanel>
</Grid>

MainWindow.xaml.cs

//When user clicks anywhere on the Grid
 private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {              
            //Close the Context menu if it's open
            if (btnTwo.ContextMenu.IsOpen)
                btnTwo.ContextMenu.IsOpen = false;
        }


    //When user clicks on btnTwo
    private void btnTwoClick(object sender, RoutedEventArgs e)
        {
            if (!btnTwo.ContextMenu.IsOpen)
            {
                //Open the Context menu when Button is clicked
                btnTwo.ContextMenu.IsEnabled = true;
                btnTwo.ContextMenu.PlacementTarget = (sender as Button);
                btnTwo.ContextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom;
                btnTwo.ContextMenu.IsOpen = true;

            }              
        }

 //When user clicks on btnOne, This event does does not fires when context menu is open
 private void btnOneClick(object sender, RoutedEventArgs e)
        {

        }

1 Ответ

0 голосов
/ 07 мая 2018

Я не могу это объяснить, но, если вы удалите

StaysOpen="False"

в вашем ContextMenu определении в XAML, тогда оно будет работать так, как вы ожидали. Кстати, вам не нужно дважды вызывать ContextMenu в триггерах кнопки XAML и в Click EventHandler.

MSDN записывает StaysOpen по умолчанию false.

true, если меню должно оставаться открытым, пока свойство IsOpen не изменится на ложный; иначе ложно. По умолчанию установлено значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...