Wie Sie einen Schieberegler, um den verfügbaren Platz auszufüllen, wenn der Schieber in einem StackPanel
Einfügen eines Slider
im Grid
würde es erweitern, um den verfügbaren Platz auszufüllen, aber ich würde es vorziehen, nicht mit einem raster aus folgendem Grund:
Habe ich eine TextBlock
und ein Slider
im UserControl
, der regler ist federbelastet und wirkt jog /shuttle; der aktuelle Wert wird angezeigt, weil der Benutzer kann sich nicht darauf verlassen, dass der Neutrale cursor-position, so dass der textblock. Die Umsetzung der **Orientation**
- Eigenschaft des benutzerdefinierten Schieberegler erfordert beide Komponenten gedreht werden und auch Ihre relative position eingestellt werden (Links/rechts oder oben/unten), die würde nicht einfach sein, mit einem Gitter (es sei denn, ich vermisse etwas offensichtlich), während es mit einem StackPanel
.
Antwort auf Aviad Kommentar
Aviad, danke, ich entschuldige mich für die Schmerzen 😉 Die Frage wurde im Titel: Wie Sie einen Schieberegler, um den verfügbaren Platz auszufüllen, wenn sich der Schieberegler in ein StackPanel ?
Diese Benutzer-Steuerung:
<UserControl x:Class="XXX.Preview.SelectionView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="auto" Width="auto">
<GroupBox Header="Selected">
<StackPanel Orientation="Horizontal">
<TextBlock/>
<Slider/>
</StackPanel>
</GroupBox>
</UserControl>
nicht ausdehnen, wenn Sie in ein raster noch in eine Zeile mit einem "*" Breite. Die regler haben keine Länge überhaupt.
Einer Lösung zu ersetzen, die stack-panel durch ein raster, in dem code unten, aber ich will nicht, um ein raster verwenden, weil ich die Orientation-Eigenschaft des stack-panel zeigen beide Steuerelemente vertikal gestapelt werden, wenn die umschließenden Benutzer-Steuerelement ist in der Ausrichtung "Vertikal".
- Versuchen Sie, formulieren Sie Ihre post, ich bin nervenaufreibenden mein Gehirn versucht zu verstehen, was du meinst. Geben Sie bitte auch eine tatsächliche gut formulierte Frage zu 🙂 Oh, und in einigen von code und XAML.
- Bitte stoppen Sie erstellen neue Benutzer-Konten...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehr einfach mit Bindung!
Beachten Sie, dass das StackPanel-Steuerelement als HorizontalAlignment="Stretch"
und einem Namen bezeichnet, die durch die Bindung
Credits an @somedust
Folgen Sie diesem link zu einer ähnlichen Frage, und erfahren Sie, wie Sie mehr Kontrolle über die Bindung mittels Konverter.
Binden Sie den Schieberegler innerhalb einer Grid-Spalte, die eine ColumnDefinition wie Witdh="*" (also das verteilen Verfügbarer Speicherplatz). Zum Beispiel, weiter unten finden Sie, wie man TextBlock | Slider | TextBlock layout mit dem Schieberegler gestreckt, um den verfügbaren Platz auszufüllen in der mittleren Spalte:
Diese Sache besser werden kann, erfolgt durch die Verwendung DockPanel statt StackPanel. Sie können versuchen, die.
Prüfen:
http://msdn.microsoft.com/en-us/library/bb628664.aspx
und http://www.wpftutorial.net/DockPanel.html
Die kurze Antwort ist: "Sie können es nicht." StackPanel begrenzt ist diese Möglichkeit durch seine ArrangeOverride und MeasureOverride-code. Es ist einfach nicht die Fähigkeit haben, zu erweitern, um den verfügbaren Platz in der stacking-Richtung.
Könnten Sie Unterklasse StackPanel, natürlich, und zu implementieren es anders, aber StackPanel ist so einfach, dass, wenn Sie gehen zu tun, können Sie auch nur Unterklasse-Panel, oder Sie können die Unterklasse DockPanel (was hat die expansion Fähigkeit) und DockPanel.Dock, auf alle seine Kinder, basierend auf seiner StackPanel.Orientation-Eigenschaft:
Immer noch nicht klar machen, warum können Sie nicht einfach ein DockPanel und verwenden Sie trigger, die in Ihrer Vorlage zum synchronisieren der Orientierung und DockPanel.Dock. Ehrlich gesagt, in den meisten Fällen würde ich eher geneigt sein, diesen Weg zu gehen als das erstellen eines benutzerdefinierten panel.