C# Buttons horizontal anordnen (WPF/MVVM)

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo Leute,

Die Buttons in meinem Projekt werden vertikal angezeigt.

Meine Frage ist: Wie kann ich die Buttons horizontal anordnen ?

Der Quellcode zeigt die Variante mit Stackpanel/ContentControl.
Ich habe auch schon Dockpanel/HeaderedContentControl
versucht. Ohne Erfolg.
Leider fehlen mir da noch die Kenntnisse/Erfahrungen.

Vielen Dank!

Code:
 MainWindowResources.xaml 

 <!--render the buttons-->
    <DataTemplate x:Key="CommandsTemplateBtn">
        <ItemsControl ItemsSource="{Binding}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding Path=DisplayName}"
                            Width="120" Margin="20,1" 
                            Command="{Binding Path=Command}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>



 MainWindow.xaml

 <!--Buttons-->
     <StackPanel Orientation="Horizontal" Grid.Row="5" >
         <ContentControl
             Content="{Binding Path=Commands}"
             ContentTemplate="{StaticResource CommandsTemplateBtn}"
         />
     </StackPanel>
 

Anhänge

  • 0Farm1.jpg
    0Farm1.jpg
    44,6 KB · Aufrufe: 301
Zuletzt bearbeitet:
Eine kurze suche bei google hätte sicher auch zu dem Ergebnis geführt und sollte eigentlich immer erste Adresse sein. Wenn das nicht weiterhilft, kann man natürlich fragen. Aber um das Thema dann auch abzuschließen ist die gesuchte Eigenschaft ItemsControl.ItemsPanel
Code:
<ItemsControl>
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal" />
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
</ItemsControl>
 
Naja du kannst ja folgendes machen

Grid
Grid.VerticalDefinitions
dort drei Einträge
Width= 100
Width = 10 <---leerraumgröße
Width = 100

und die Buttons:

Button Grid.Column = 0
Button Grid.Column = 2
 
Vielen Dank für die Antworten.

Problem gelöst und wieder was dazu gelernt. ;)

<ItemsControl.ItemsPanel> ist das Stichwort für google. Leider habe ich danach nicht gesucht.
Deshalb habe ich hier nachgefragt.

@matias
Ich muss in das template schreiben. Da habe ich nur eine Button-Definition.
 
Zuletzt bearbeitet:
ja die Definition wie die buttons angeordnet seien sollen.
Oder ich versteh was falsch.^^
 
matias schrieb:
ja die Definition wie die buttons angeordnet seien sollen.
Oder ich versteh was falsch.^^

Ich habe es jetzt so gelöst. Damit funzt es. Ich denke, <WrapPanel /> ist für
das Projekt völlig ausreichend, da ich nur 3 Buttons brauche und es nicht
zum Zeilenumbruch kommt.
<Stackpanel .../> vs. <WrapPanel /> wäre auch möglich.

Code:
  <!--render the buttons-->
    <DataTemplate x:Key="CommandsTemplateBtn">
        <ItemsControl ItemsSource="{Binding}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding Path=DisplayName}"
                            Width="120" Margin="5,1" 
                            Command="{Binding Path=Command}"/>
                </DataTemplate>

            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>
 
Du brauchst ja keinen template wenn du es nicht an mehreren stellen verwenden möchtest. Die ganzen Controls kannst du hin und her auf der GUI ziehen lassen.
 
roker002 schrieb:
Du brauchst ja keinen template wenn du es nicht an mehreren stellen verwenden möchtest. Die ganzen Controls kannst du hin und her auf der GUI ziehen lassen.

Ja das kann man so machen. Ich möchte das gesamte Projekt
aber nach MVVM programmieren (zum Lernen).

Die Templates rendern die ViewModels.
 
Zurück
Oben