簡體   English   中英

左鍵單擊打開按鈕ContextMenu

[英]Open Buttons ContextMenu on Left Click

我有一個帶有上下文菜單的按鈕,我的要求是在單擊鼠標左鍵時顯示上下文菜單

問題是打開上下文菜單時, <ContextMenu ItemsSource="{Binding LineItems}"不會被更新/刷新。 但是,如果我先右鍵單擊,項目會很好地加載

XAML

<Button  x:Name="BtnMessageChannel" Click="BtnMessageChannel_Click" Grid.Row="0" Grid.Column="2" Height="23" Width="23" ToolTip="Message Channel" >
    <Button.ContextMenu>
        <ContextMenu ItemsSource="{Binding LineItems}" x:Name="CtxMessageChannel">
            <ContextMenu.Resources>
                <Image x:Key="img" Source="{Binding Icon}" x:Shared="false"/>
                <Style TargetType="{x:Type MenuItem}">
                    <Setter Property="Header" Value="{Binding DisplayName}"/>
                    <Setter Property="Icon" Value="{StaticResource img}">
                    </Setter>
                </Style>
            </ContextMenu.Resources>
        </ContextMenu>
    </Button.ContextMenu>
    <Image Source="Images/mail_send.png" HorizontalAlignment="Left" Width="16" />
</Button>

背后的代碼

private void BtnMessageChannel_Click(object sender, RoutedEventArgs e)
{
   BtnMessageChannel.ContextMenu.GetBindingExpression(ContextMenu.ItemsSourceProperty)
            .UpdateTarget();  
   BtnMessageChannel.ContextMenu.Visibility = Visibility.Visible;
   BtnMessageChannel.ContextMenu.IsOpen = true;

}

是否有解決此問題的簡便方法?

一個簡單的解決方案是,如果上下文菜單當前未打開,則更新按鈕事件處理程序以模擬右鍵單擊。

    private void BtnMessageChannel_Click(object sender, RoutedEventArgs e)
    {
        if (!BtnMessageChannel.ContextMenu.IsOpen)
        {
            e.Handled = true;

            var mouseRightClickEvent = new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Right)
            {
                RoutedEvent = Mouse.MouseUpEvent,
                Source = sender,
            };
            InputManager.Current.ProcessInput(mouseRightClickEvent);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM