Benutzer mit den meisten Antworten
RibbonSplitButton

Frage
-
Hi liebe Community ;)Ich werke jetzt schon seit Stunden an einer Applikation, welche das Office Ribbon nutzen soll ... Ich möchte in einem Ribbon Tab einen Button erzeugen, welcher sich durch ein DropDownMenü erweitern lassen soll ...Es soll wie in folgendem Blog konkret beschrieben funktionieren : http://www.uxpassion.com/2009/02/how-to-use-add-ribbon-to-wpf-applications-part-5/Doch das tut es nicht ! Der Button zeigt mir auch den "Erweiterungs - Pfeil" nach unten hin an ... Aber ich kann den Button selbst nicht klicken ?? In den Properties ist lustigerweise die "IsEnabled" Eigenschaft nicht auf "True" gesetzt, ich kann diese aber auch nicht ändern ... Wenn ich dem Button ein Klick - Event hinterlege, in der eine Msg - Box aufgerufen wird tut sich nichts, wenn ich auf den Button klicke ... Ich verwende VS2010 Beta2 und die RibbonControlsLibrary.dll für das Projekt.Hoffe Ihr könnt mir helfen, ich komm nicht auf den Fehler ;)Danke schonmal im Voraus ;)Grüße, Roland
<DockPanel LastChildFill="False" Background="#FFDFE9F5" Height="137" VerticalAlignment="Top"> <r:Ribbon DockPanel.Dock="Top" Name="RibbonPanel" ShowQuickAccessToolbarOnTop="False"> <r:Ribbon.Resources> <r:RibbonCommand x:Key="_Angebotsverwaltung" LabelTitle="Angebotsverwaltung"/> </r:Ribbon.Resources> <r:Ribbon.ApplicationMenu> <r:RibbonApplicationMenu> <r:RibbonApplicationMenuItem Command="{StaticResource _Angebotsverwaltung}"/> </r:RibbonApplicationMenu> </r:Ribbon.ApplicationMenu> <r:RibbonTab Label="Warenwirtschaft"> <r:RibbonGroup> <r:RibbonGroup.Command> <r:RibbonCommand LabelTitle="Details" /> </r:RibbonGroup.Command> <r:RibbonSplitButton Command="{StaticResource _Angebotsverwaltung}"> <r:RibbonSplitButton.Items> <MenuItem Header="_Angebot erfassen"> <MenuItem.Icon> <Image></Image> </MenuItem.Icon> </MenuItem> <MenuItem Header="_Angebot erfassen"/> </r:RibbonSplitButton.Items> </r:RibbonSplitButton> </r:RibbonGroup> </r:RibbonTab> </r:Ribbon> </DockPanel>
Antworten
-
Hi Roland,
das Problem ist ganz einfach, dass es keine Definition dessen gibt, was beim Ausführen des _Angebotsverwaltung Commands geschehen soll. Sprich, CanExecute ergibt für das Command immer false , dadurch wird dann letztlich IsEnabled auf false gesetzt. Da Du das Command auch noch für einen ApplicationMenuItem hinterlegt hast, sollte auch dieser als "disabled" erscheinen.
Du musst also entweder ein ICommand definieren, oder einen Click-Handler zuweisen, sodass dort z.B. folgendes steht:
<r:RibbonCommand x:Key="_Angebotsverwaltung" LabelTitle="Angebotsverwaltung" Executed="RibbonCommand_Executed"/>
Das setzt natürlich voraus, dass im code-behind der RibbonCommand_Executed auch vorhanden ist. Also solltest Du diesen nicht einfach per Copy'n'Paste von hier hinzufügen, sondern Intellisense in Deinem XAML verwenden, um den Handler durch VS erzeugen zu lassen.
Cheers,
Olaf
http://blogs.intuidev.com- Als Antwort vorgeschlagen Olaf Rabbachin Samstag, 6. Februar 2010 10:29
- Als Antwort markiert WPF_SpellCaster Samstag, 6. Februar 2010 10:33
Alle Antworten
-
Hi Roland,
das Problem ist ganz einfach, dass es keine Definition dessen gibt, was beim Ausführen des _Angebotsverwaltung Commands geschehen soll. Sprich, CanExecute ergibt für das Command immer false , dadurch wird dann letztlich IsEnabled auf false gesetzt. Da Du das Command auch noch für einen ApplicationMenuItem hinterlegt hast, sollte auch dieser als "disabled" erscheinen.
Du musst also entweder ein ICommand definieren, oder einen Click-Handler zuweisen, sodass dort z.B. folgendes steht:
<r:RibbonCommand x:Key="_Angebotsverwaltung" LabelTitle="Angebotsverwaltung" Executed="RibbonCommand_Executed"/>
Das setzt natürlich voraus, dass im code-behind der RibbonCommand_Executed auch vorhanden ist. Also solltest Du diesen nicht einfach per Copy'n'Paste von hier hinzufügen, sondern Intellisense in Deinem XAML verwenden, um den Handler durch VS erzeugen zu lassen.
Cheers,
Olaf
http://blogs.intuidev.com- Als Antwort vorgeschlagen Olaf Rabbachin Samstag, 6. Februar 2010 10:29
- Als Antwort markiert WPF_SpellCaster Samstag, 6. Februar 2010 10:33
-
Ich hätte noch eine kurze Frage ;)Ist es möglich, den oberen Executed - Command auch im CodeBehind sozusagen mit AddHandler zu definieren ...Ich habe versucht einen SplitButton per Sourcecode zu erzeugen, funktioniert auch, leider endet die Geschichte wieder beim Execute - Command ;)Dim NewCommand As New Microsoft.Windows.Controls.Ribbon.RibbonCommandNewCommand.LabelTitle = "TestLabel"NewCommand.Execute() ........Dim NewMenuItem As New System.Windows.Controls.MenuItemNewMenuItem.Header = "HelloWorld"Dim NewSplitButton As New Microsoft.Windows.Controls.Ribbon.RibbonSplitButtonNewSplitButton.Command = NewCommandNewSplitButton.Items.Add(NewMenuItem)Dim NewRibbonGroup As New Microsoft.Windows.Controls.Ribbon.RibbonGroupNewRibbonGroup.Controls.Add(NewSplitButton)Dim Rtab As New Microsoft.Windows.Controls.Ribbon.RibbonTabRtab.Groups.Add(NewRibbonGroup)Rtab.Label = "Stamm"RibbonPanel.Tabs.Add(Rtab)Was muss ich bei "NewCommand.Execute" schreiben ??Grüße,Roland
-
Hi Roland,
IIRC musst Du das über ein CommandBinding regeln. Sprich, ersetze Dein NewCommand.Execute()... durch (air-code):
Dim cb As New CommandBinding(NewCommand) AddHandler cb.Executed, AddressOf NameDerMethode
Bin aber nicht wirklich sicher und kann's momentan nicht ausprobieren.
Cheers,
Olaf
http://blogs.intuidev.com -
Bekomme den Fehler : "Unable to cast Object of type 'System.Windows.Input.CommandBinding' to type 'System.Windows.Input.ICommand'.Source-Code sieht nun so aus :Private Sub Create_Buttons()TryDim NewCommand As New Microsoft.Windows.Controls.Ribbon.RibbonCommandNewCommand.LabelTitle = "TestLabel"Dim cb As New CommandBinding(NewCommand)AddHandler cb.Executed, AddressOf RibbonCommand_ExecutedDim NewMenuItem As New System.Windows.Controls.MenuItemNewMenuItem.Header = "HelloWorld"Dim NewSplitButton As New Microsoft.Windows.Controls.Ribbon.RibbonSplitButtonNewSplitButton.Command = cb ' FehlerstelleNewSplitButton.Items.Add(NewMenuItem)Dim NewRibbonGroup As New Microsoft.Windows.Controls.Ribbon.RibbonGroupNewRibbonGroup.Controls.Add(NewSplitButton)Dim Rtab As New Microsoft.Windows.Controls.Ribbon.RibbonTabRtab.Groups.Add(NewRibbonGroup)Rtab.Label = "Stamm"RibbonPanel.Tabs.Add(Rtab)Catch ex As ExceptionMessageBox.Show(ex.Message)End TryEnd SubPrivate Sub RibbonCommand_Executed(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)MessageBox.Show("")End Sub
-
Hi Roland,
Du musst nicht das CommandBinding (cb ) zuweisen, sondern das RibbonCommand (NewCommand ).
Cheers,
Olaf
http://blogs.intuidev.com -
ich musste beides zuweisen ;)
Dim NewSplitButton As New Microsoft.Windows.Controls.Ribbon.RibbonSplitButton
NewSplitButton.Command = NewCommand
NewSplitButton.CommandBindings.Add(cb)
NewSplitButton.Items.Add(NewMenuItem)
Jetzt funktionierts ;)
Vielen Dank !
schöne Grüße,
Roland