2008-10-24 12 views
11

Ich versuche, ein Element auf ToolBar (insbesondere ein Label, TextBlock oder eine TextBox), die alle verfügbaren horizontalen Raum zu füllen. Ich habe die ToolBar selbst zum Ausstrecken gebracht, indem ich sie aus dem ToolBarTray genommen habe, aber ich kann nicht herausfinden, wie man Elemente streckt.Wie mache ich ein Element in einer Symbolleiste füllen alle verfügbaren Platz in WPF

Ich habe versucht, Width auf Percenatage oder Star-Werte zu setzen, aber das akzeptiert das nicht. Das Einstellen der horizontalen Ausrichtung (Content) auf Stretch an verschiedenen Stellen scheint ebenfalls keine Auswirkungen zu haben.

+0

Können Sie bitte Ihre XAML posten, um zu demonstrieren, was nicht funktioniert? –

Antwort

0

Versuchen Sie, ein horizontales StackPanel in der ToolBar und dann das gewünschte Element innerhalb dieses StackPanels zu platzieren.

+0

OK, versuchte das, aber es hat das Layout überhaupt nicht beeinflusst. – Cheetah

+0

Wenn ich ToolbarPanel.MeasureOverride in Reflector ansehe, denke ich, dass hierfür eine benutzerdefinierte Klasse erforderlich sein kann, die die Symbolleisten enthält, innerhalb derer man die Symbolleisten-Steuerelemente platzieren kann, da die Symbolleiste selbst angibt, dass unendlich viel Platz verfügbar ist. – Cheetah

12

Leider sieht es aus wie die Standard-Control für ToolBar keine Itemspresenter nutzen finden können, ist es ein ToolBarPanel verwendet, so Einstellung ToolBar.ItemsPanel keine Auswirkungen haben.

ToolBarPanel erbt von StackPanel. Standardmäßig ist die Orientierung an übergeordneten ToolBar.Orientation gebunden, aber Sie können diese außer Kraft gesetzt und seine Ausrichtung auf Vertikal mit einem Stil und dies ermöglicht es Elemente horizontal strecken:

<DockPanel> 
    <ToolBar DockPanel.Dock="Top"> 
     <ToolBar.Resources> 
      <Style TargetType="{x:Type ToolBarPanel}"> 
       <Setter Property="Orientation" Value="Vertical"/> 
      </Style> 
     </ToolBar.Resources> 
     <ComboBox HorizontalAlignment="Stretch" SelectedIndex="0"> 
      <ComboBoxItem>A B C</ComboBoxItem> 
      <ComboBoxItem>1 2 3</ComboBoxItem> 
      <ComboBoxItem>Do Re Mi</ComboBoxItem> 
     </ComboBox> 
    </ToolBar> 
    <Border Margin="10" BorderBrush="Yellow" BorderThickness="3"/> 
</DockPanel> 

Sie dann ein Gitter verwenden können, oder etwas anstelle der obigen ComboBox, wenn Sie mehrere Elemente in einer Zeile haben möchten.

0

Haben Sie versucht, Ihr Element in einem Grid zu verpacken, nicht in einem StackPanel?

0

Ich hatte das gleiche Problem für eine Weile, und es gibt sehr wenig Hilfe online verfügbar.

Da es nicht so klingt, als würden Sie alle zusätzlichen Funktionen einer Toolbar benötigen (zusammenklappbare/bewegliche Fächer), verwenden Sie einfach ein Top-docked Grid und den Hintergrund ein wenig, um ihn wie einen Standard aussehen zu lassen Symbolleiste?

Verwandte Themen