none
RibbonApplicationMenuItem のふたつの問題 RRS feed

  • 質問

  • ふたつ問題があります。
    これらの回避策についての情報をいただけると幸いです。

    1. RibbonApplicationMenuItem をクリックするとイベントが2回通知される
    2. Expander を開いてから RibbonApplicationMenuItem をクリックすると、 OriginalSource が Expander になっている

    環境は
    Windows 7
    .NET Framework 4.5
    Visual Studio 2012 Pro
    です。

    以下、再現コードです (System.Windows.Controls.Ribbon を参照に追加します)。

    <RibbonWindow 
        x:Class="ExpanderIssue.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">
        
        <StackPanel Orientation="Vertical">
            <Ribbon IsMinimized="True">
                <Ribbon.ApplicationMenu>
                    <RibbonApplicationMenu>
                        <RibbonApplicationSplitMenuItem Header="Open" Command="Open"/>
                    </RibbonApplicationMenu>
                </Ribbon.ApplicationMenu>
            </Ribbon>
            <Expander Header="Expander" IsExpanded="False">
                <TextBlock Text="Test"/>
            </Expander>
        </StackPanel>
        
    </RibbonWindow>
    using System.Windows;
    using System.Windows.Controls.Ribbon;
    using System.Windows.Input;
    
    namespace ExpanderIssue
    {
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : RibbonWindow
        {
            static MainWindow()
            {
                CommandManager.RegisterClassCommandBinding(typeof(MainWindow), new CommandBinding(ApplicationCommands.Open, DoOpen));
            }
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private static void DoOpen(object sender, ExecutedRoutedEventArgs e)
            {
                e.Handled = true;
    
                MessageBox.Show(string.Format("Open: OriginalSource={0}", e.OriginalSource));
            }
        }
    }

    2013年6月21日 6:40