2011-10-28 12 views
9

Jak można utworzyć pionowe menu po lewej stronie okna w Visual Studio (w kodzie wpf) z XAML, jak w http://www.wpftutorial.net/? Próbuję kod:Tworzenie pionowego menu w Wpf

<Menu DockPanel.Dock="Left" VerticalAlignment="Top" Background="Gray" BorderBrush="Black"> 

, ale to nie jest zadaniem, ponieważ przedstawia horyzontalne menu na górze.

Nie jest to wymagane, aby zrobić to zdecydowanie za pomocą menu sterowania. Jeśli jakakolwiek inna kontrola o podobnym wyglądzie jest odpowiednia, jest to dopuszczalne.

+0

Czy masz 'DockPanel' wokół' Menu'? – Jon

+0

Tak, robię, to nie może działać inaczej. – arjacsoh

+0

możesz użyć zaakceptowanej odpowiedzi i utworzyć własne lub https://github.com/beto-rodriguez/MaterialMenu, które jest gotowe do użycia –

Odpowiedz

42

Jasne, wystarczy zmienić MenuItem.ItemsPanel użycie pionowej StackPanel zamiast domyślnego pozioma jeden

<Menu> 
    <Menu.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel Orientation="Vertical"/> 
     </ItemsPanelTemplate> 
    </Menu.ItemsPanel> 

</Menu> 
+1

@arjacsoh Jeśli menu jest ostatnim elementem dodawanym do panelu DockPanel, to przez domyślnie rozciągnie się, aby wypełnić całą pozostałą przestrzeń. Albo ustaw "LastChildFill =" False "" na DockPanel, albo dodaj kolejny element po Menu. Poniżej znajduje się dobry link do zapoznania się z różnymi układami WPF: http://www.codeproject.com/KB/WPF/WPFLayoutQS.aspx – Rachel

1

Akceptowane anwer jest dobre. Ale jest to długa droga do uzyskania dobrego paska bocznego. możesz użyć tej kontrolki, jeśli potrzebujesz teraz działającego menu.

https://github.com/beto-rodriguez/MaterialMenu

można go zainstalować z Nuget też.

tutaj jest przykładem

<materialMenu:SideMenu HorizontalAlignment="Left" x:Name="Menu" 
          MenuWidth="300" 
          Theme="Default" 
          State="Hidden"> 
     <materialMenu:SideMenu.Menu> 
      <ScrollViewer VerticalScrollBarVisibility="Hidden"> 
       <StackPanel Orientation="Vertical"> 
        <Border Background="#337AB5"> 
         <Grid Margin="10"> 
          <TextBox Height="150" BorderThickness="0" Background="Transparent" 
           VerticalContentAlignment="Bottom" FontFamily="Calibri" FontSize="18" 
           Foreground="WhiteSmoke" FontWeight="Bold">Welcome</TextBox> 
         </Grid> 
        </Border> 
        <materialMenu:MenuButton Text="Administration"></materialMenu:MenuButton> 
        <materialMenu:MenuButton Text="Packing"></materialMenu:MenuButton> 
        <materialMenu:MenuButton Text="Logistics"></materialMenu:MenuButton> 
       </StackPanel> 
      </ScrollViewer> 
     </materialMenu:SideMenu.Menu> 
    </materialMenu:SideMenu> 

enter image description here

+2

Chociaż jest to niezły projekt, "praca teraz" jest trochę rozciągnąć (próbowałem) i nie robi to, co zadał OP, co przyjęta odpowiedź. OP poprosił o menu, a nie pasek boczny. –