2010-11-23 4 views
0

Ich verwende Microsofts neues WPF-Band (Oktober 2010 Release) und ich gestaltete mein Anwendungsmenü mit einem RibbonApplicationSplitMenuItem. Wenn der Benutzer auf die RibbonApplicationSplitMenuItem klickt, möchte ich den Programmeinstellungen Dialog öffnen. Die Unterelemente enthalten direkte Links zu den verschiedenen Registerkarten im Einstellungsdialog und ich möchte den Einstellungsdialog mit der ausgewählten Seite öffnen.WPF-Ribbon-Anwendungsmenü mit Unterelementen führt Sub-Element UND Eltern-Callback

<ribbon:RibbonApplicationSplitMenuItem 
    Header="Settings" 
    x:Name="SettingsItem" 
    Click="settingsClicked" 
> 
    <ribbon:RibbonApplicationMenuItem 
    Header="Scanner Settings" 
    x:Name="scannerSettingsItem" 
    Click="scannerSettingsClicked" 
    /> 
    <ribbon:RibbonApplicationMenuItem 
    Header="Printer Settings" 
    x:Name="printerSettingsItem" 
    Click="printerSettingsClicked" 
    /> 
</ribbon:RibbonApplicationSplitMenuItem> 

Mein Problem ist, dass wenn der Benutzer z. B. auf klickt. Unter dem Unterpunkt "Scanner Einstellungen" wird zunächst der Callback scannerSettingsClicked() ausgeführt und anschließend der Callback settingsClicked(), wodurch der Einstellungsdialog ein zweites Mal direkt nach dem Schließen angezeigt wird.

Das Eigenschaftsfenster in Visual Studio WPF-Designer weigert sich auch, die Callback-Subskriptionen anzuzeigen, wenn Sie entweder den Callback des übergeordneten Elements oder alle Unterelemente entfernen, also muss ich etwas falsch machen.

Wie kann ich das gewünschte Verhalten erreichen?

+0

Ich "löste" dies durch Messen der Zeit, die zwischen scannerSettingsClicked() ending und settingsClicked() beim Start vergangen ist. Wenn es weniger als 500 ms ist, nehme ich an, dass es sich um den Folgeaufruf handelt, und mache nichts. Nicht großartig, aber macht den Job erledigt ... – Cygon

Antwort

1

In Ihrem Unterpunkt click events setzen Sie e.Handled = true, damit das Ereignis nicht bis zum übergeordneten Element zurückgesprudelt wird.

+0

Danke, das ist viel besser als meine schrullige Workaround! – Cygon