How to Use the ribbon:RibbonCombobox
The main question is how do I retrieve the selectedItem
from the ribbonComboBox
The answer is in the "naming" of the XAML elements and using the correct element-properties.
Step 1
Mainwindow.xaml
<wrappanel>
<ribbon:ribboncombobox selectionboxwidth="100">
<ribbon:ribbongallery x:name="fontsComboBox">
SelectionChanged="RibbonGallery_SelectionChanged">
<ribbon:ribbongallerycategory x:name="fonts" />
</ribbon:ribbongallery>
</ribbon:ribboncombobox>
<ribbon:ribboncombobox selectionboxwidth="40" >
<ribbon:ribbongallery x:name="fontSizeComboBox">
SelectionChanged="RibbonGallery_SelectionChanged">
<ribbon:ribbongallerycategory x:name="fontSize" />
</ribbon:ribbongallery>
</ribbon:ribboncombobox>
</wrappanel>
Step 2
Mainwindow.xaml.cs
public MainWindow()
{
InitializeComponent();
InitializeFonts();
}
public void InitializeFonts()
{
fonts.ItemsSource = Fonts.SystemFontFamilies;
fontsComboBox.SelectedItem = "Arial";
for (double i = 8; i < 48; i += 2)
{
fontSize.Items.Add(i);
}
fontSizeComboBox.SelectedItem = "8";
}
Step 3
The SelectionChanged
:
private void RibbonGallery_SelectionChanged(object sender,
RoutedPropertyChangedEventArgs<object> e)
{
RibbonGallery source = e.OriginalSource as RibbonGallery;
if (source == null) return;
switch (source.Name)
{
case "fontsComboBox":
_documentManager.ApplyToSelection(
TextBlock.FontFamilyProperty,
source.SelectedItem);
break;
case "fontSizeComboBox":
_documentManager.ApplyToSelection(
TextBlock.FontSizeProperty,
source.SelectedItem);
break;
}
}
In short, the RibbonGallery
contains the SelectionChanged
method and the RibbonGalleryCategory
contain the ItemSource
.
fonts.ItemsSource = Fonts.SystemFontFailies
can be included directly into the XAML code as ItemSource = {x:Static Fonts.SystemFontFamilies}
Finally, some useful links: