2010-02-17 5 views
2

Я пытаюсь создать несколько выпадающих списков для панели инструментов и хочу, чтобы они выглядели как раскрывающийся список макетов страницы в Word (например, меню «Ориентация и размер»).Ribbon-Like Control в WPF

Я попытался сделать это с помощью ComboBox, но не могу понять, как показать имя параметра, а не выбранный элемент в верхней части ComboBox. Можно ли сделать ComboBox показать все, что вы хотите, чтобы он был наверху?

Должен ли я пытаться сделать это с помощью ComboBox или есть лучший способ сделать это?

alt text http://www.mstipsandtricks.com/tips-and-tricks/ms-office-tips-and-tricks/ms-word/How-to-set-orientation-to-entire-document-or-part-of-document-in-MS-Word-2007/figure2.jpg

EDIT: Похоже, мне нужен контроль ленты. Могу ли я сделать простой из ComboBox? Кажется, я близок, мне просто нужно отображать категорию в ComboBox вместо выбранного элемента.

ответ

2

Вы можете построить это, используя поле со списком, если вы хотите, посмотрите на пример ComboBox ControlTemplate по адресу: http://msdn.microsoft.com/en-us/library/ms752094.aspx

Вы можете увидеть на этой странице, что выпадающий состоит из тумблера, всплывающее окно, текстовое поле и презентатор контента (только один из двух последних виден в зависимости от режима combobox).

Вы можете удалить текстовое поле и презентатор контента из шаблона combobox и заменить их тем, что хотите - например, большой значок и имя параметра.

Вы также можете использовать ту же самую технологию кнопки переключения, привязанную к всплывающему окну, чтобы создать свой собственный (без комбобок) выпадающий элемент управления.

+0

Спасибо за идею. Я не знал о контроле Popup. Я пошел с Button и Popup, и он отлично поработал. Благодаря! –

4

Слово использует Ленты.

Адрес WPF Ribbons project. Это будет способ сделать то, что вы ищете.

+0

Из соображений безопасности я не могу загрузить элемент управления MS, на который ссылается статья, поэтому сейчас мне придется попробовать по-другому. Есть идеи? –

+0

+1 Спасибо, что дал мне правильную терминологию. Googleing намного проще, когда вы используете правильные слова. –

2

Я не пробовал это сам, но WPF «Fluent Ribbon Control Suite» был добавлен в галерею Visual Studio ранее на этой неделе.

0

вот пример использования ленты, написав код xaml. это очень легко, когда вы привыкнете к этому.

первым добавить эту ссылку: enter image description here

затем добавить это пространство имен в файле XAML:

enter image description here

и теперь использовать этот шаблон кода для работы с:

<DockPanel> 
    <ribbon:Ribbon DockPanel.Dock="Top" Margin="0,-22,0,0"> 

     <Ribbon.ApplicationMenu> 
      <RibbonApplicationMenu SmallImageSource="Images/list.png"> 

       <RibbonApplicationMenu.AuxiliaryPaneContent> 
        <RibbonGallery ScrollViewer.VerticalScrollBarVisibility="Auto"> 
         <RibbonGalleryCategory MaxColumnCount="1"> 
          <RibbonGalleryItem x:Name="GalleryItem1" Content="C# developer" 
           MouseOverBackground="Transparent" 
           MouseOverBorderBrush="Transparent" 
           CheckedBackground="Transparent" 
           CheckedBorderBrush="Transparent" 
               /> 
          <RibbonGalleryItem> 
           <Hyperlink x:Name="hl1" Click="hl1_Click"> 
            <Run Text="http://www.bing.com"/> 
           </Hyperlink> 
          </RibbonGalleryItem> 
         </RibbonGalleryCategory> 
        </RibbonGallery> 
       </RibbonApplicationMenu.AuxiliaryPaneContent> 
       <RibbonApplicationMenuItem x:Name="menuItem1" Header="Add" ImageSource="Images/add.png"/> 
       <RibbonApplicationMenuItem x:Name="menuItem2" Header="Settings" 
              ImageSource="Images/system_preferences.png"/> 

      </RibbonApplicationMenu> 
     </Ribbon.ApplicationMenu> 
     <!--Rider--> 
     <RibbonTab x:Name="rbnTab1" Header="Tab1"> 
      <RibbonGroup x:Name="rbnGr1" Header="General"> 
       <RibbonButton x:Name="btnRibbon1" Label="Save" LargeImageSource="Images/filesave.png"/> 
       <RibbonButton x:Name="btnRibbon2" Label="Open" LargeImageSource="Images/load.png"/> 
      </RibbonGroup> 
      <RibbonGroup x:Name="rbnGr2" Header="New group"> 
       <RibbonButton x:Name="btnRibbon3" Label="Font" LargeImageSource="Images/fonts.png"/> 
       <RibbonButton x:Name="btnRibbon4" Label="Delete" LargeImageSource="Images/recycle_bin.png"/> 
      </RibbonGroup> 
     </RibbonTab> 
     <RibbonTab x:Name="rbnTab2" Header="Tab2"> 
      <RibbonGroup x:Name="rbnGr3" Header="Other Group"> 
       <RibbonButton x:Name="btnRibbon5" Label="Play" LargeImageSource="Images/play.png"/> 
       <RibbonButton x:Name="btnRibbon6" Label="List" LargeImageSource="Images/kmenuedit.png"/> 
      </RibbonGroup> 
      <RibbonGroup x:Name="rbnGr4" Header="What a group"> 
       <RibbonButton x:Name="btnRibbon7" Label="Sleep" LargeImageSource="Images/icon_sleep.png"/> 
       <RibbonButton x:Name="btnRibbon8" Label="Add" LargeImageSource="Images/add.png"/> 
      </RibbonGroup> 
     </RibbonTab> 
    </ribbon:Ribbon> 

    <Grid> 
     <Button x:Name="button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/> 

    </Grid> 
</DockPanel> 

если вы хотите скрыть <Ribbon.ApplicationMenu>, просто добавьте следующее свойство: <Ribbon.ApplicationMenu> <RibbonApplicationMenu Visibility="Collapsed"> </RibbonApplicationMenu> </Ribbon.ApplicationMenu>