2016-12-21 1 views
1

So habe ich dieses Szenario, in dem ich eine Grid innerhalb einer ScrollViewer zeigen. Ich möchte eine Combobox zeigen, und ein Bild entlang der Scrollbar in einer Weise, dass es nicht die Scroll-Funktion nicht beeinflusst, Etwas wie folgt aus: enter image description hereZeige Steuerelemente in der Scrollviewer Zeile entlang der Bildlaufleiste

Zeit, wenn die Scroll sichtbar wird es in einer neuen Zeile angezeigt wird, Wie kann ich es entlang der Steuerelemente in der gleichen Zeile anzeigen?

Hier ist mein XAML-Design:

<DockPanel LastChildFill="True"> 

    <!--Top Panel--> 
    <Grid DockPanel.Dock="Top"> 
     --GridContent 
    </Grid> 

    <!--Bottom Panel--> 
    <Grid DockPanel.Dock="Bottom"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 


     <ComboBox Grid.Column ="0"> 
     </ComboBox> 

     <Image Grid.Column="1"> 

     </Image> 
    </Grid> 

    <ScrollViewer HorizontalScrollBarVisibility="Auto" HorizontalAlignment="Stretch" 
        VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch" > 
     <Grid    
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch"> 
      -- Grid Content 
     </Grid> 
    </ScrollViewer> 
</DockPanel> 

Derzeit erscheint es wie folgt aus:

enter image description here

+0

Es sei denn, Sie einige ziemlich komplizierte benutzerdefinierte Templating tun wollen, eine schnelle Abhilfe ist verstecken gerade die horizontalbarvisibility im Scroll und stattdessen nur eine Scrollbar zu den Offset- und scrollchanged Eigenschaften des Scroll Sie wollen interagieren gebunden verwenden mit . Würde länger dauern, um ein Beispiel zu machen, als ich in der Freizeit though, sorry Amigo –

+0

In Ihrem Beispiel ist Ihr ScrollViewer nicht im selben Raster wie das Kombinationsfeld und das Bild. Ist das beabsichtigt? – Bryan

+0

@Bryan Ja, weil ich nicht möchte, dass diese Steuerelemente mit dem Rasterinhalt fließen, wenn der Benutzer scrollt. – Sameed

Antwort

2

Ich habe nicht zu tun dies in XAML sah, aber man kann es so machen in dem Code hinter:

public partial class MainWindow : Window 
{ 
    private void IncrementColumn(UIElement element) 
    { 
     Grid.SetColumn(element, Grid.GetColumn(element) + 1); 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     scrollPanel.ApplyTemplate(); 

     var horizontal = scrollPanel.Template.FindName("PART_HorizontalScrollBar", scrollPanel) as ScrollBar; 
     var vertical = scrollPanel.Template.FindName("PART_VerticalScrollBar", scrollPanel) as ScrollBar; 
     var presenter = scrollPanel.Template.FindName("PART_ScrollContentPresenter", scrollPanel) as ScrollContentPresenter; 
     var corner = scrollPanel.Template.FindName("Corner", scrollPanel) as Rectangle; 
     var grid = corner.Parent as Grid; 

     grid.ColumnDefinitions.Insert(0, new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Auto) }); 
     IncrementColumn(horizontal); 
     IncrementColumn(vertical); 
     IncrementColumn(corner); 
     Grid.SetColumnSpan(presenter, 2); 

     var panel = new StackPanel() { Orientation = Orientation.Horizontal }; 
     panel.Children.Add(new ComboBox()); 
     panel.Children.Add(new Image()); 

     Grid.SetRow(panel, 1); 
     Grid.SetColumn(panel, 0); 
     grid.Children.Add(panel); 
    } 
} 

Hier ist der XAML zu gehen:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     Title="MainWindow" Height="150" Width="525"> 
     <ScrollViewer 
      Name="scrollPanel" 
      HorizontalScrollBarVisibility="Visible" 
      HorizontalAlignment="Stretch" 
      VerticalScrollBarVisibility="Auto" 
      VerticalAlignment="Stretch"> 
      <Grid    
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch"> 
       <Image Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"/> 
      </Grid> 
     </ScrollViewer> 
</Window> 
+0

Dank Kumpel, große Antwort, ich folgte diesem Ansatz und implementiert es in XAML, funktioniert wie ein Charme. – Sameed

+0

Kein Problem, ich bin froh, dass es Ihnen geholfen hat, die Antwort zu finden. Ich würde gerne Ihre XAML-Lösung sehen. Könnten Sie es zu Ihrer Frage oder etwas hinzufügen? – sclarke81

Verwandte Themen