2014-06-24 1 views
8

Ich verwende Xamarin.Forms und habe eine ScrollView erstellt, die ein horizontales StackLayout enthält. Ich möchte horizontal scrollen können, also setze ich:Scrollen horizontal in Xamarin.Forms ScrollView

Aber ich bekomme keine horizontale Bildlaufleiste. Der Inhalt des StackLayout ist breiter als der Bildschirm und ich sehe, dass der Inhalt an der Kante abgeschnitten wird.

Wie erreiche ich horizontale Scroll mit Xamarin.Forms?

+0

Können Sie Ihren Code zum Erstellen der ScrollView und zum Festlegen des Inhalts mit dem StackLayout eingeben? – Pedro

Antwort

12

Das ist, wie ich es

 var scrollView = ScrollView 
     { 
      HorizontalOptions = LayoutOptions.Fill, 
      Orientation = ScrollOrientation.Horizontal, 

      Content = new StackLayout{ 
       Orientation = StackOrientation.Horizontal, 
       Children = {} 
      } 
     }; 
+2

In der Tat müssen wir Orientation = ScrollOrientation.Horizontal auf dem StackLayout haben. Vielen Dank. – Barton

+0

Ich habe das gleiche Problem, aber ich füge die Stacklayout-Kinder programmgesteuert hinzu. und unten funktioniert die Antwort nicht für mich! – AlirezaXX

0

zu arbeiten, wenn Sie die Vorlagen in Visual Studio 2013 für Xamarin-Anwendungen verwenden, ist die Version von Xamarin.Forms etwas veraltet und Scrollen nicht unterstützt. Um dies zu beheben, nuget nur 'update-package' und diesen Code

public class MainPage : ContentPage 
{ 
    public MainPage() 
    { 
     Label label = new Label { 
      Text = "This is a very long label which I expect to scroll horizontally because it's in a ScrollView.", 
      Font = Font.SystemFontOfSize(24), 
     }; 

     this.Content = new ScrollView { 
      Content = label, 
      Orientation = ScrollOrientation.Horizontal, 
     }; 
    } 
} 

Code funktioniert gut auf Android.

Für iOS wird der Code wie erwartet funktionieren.

Leider gibt es bei WP8 leider einen Fehler und der Hack besteht darin, einen benutzerdefinierten Renderer hinzuzufügen.

using System.Windows.Controls; 
using App2.WinPhone; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.WinPhone; 

[assembly: ExportRenderer(typeof(ScrollView), typeof(FixedSVRenderer))] 

namespace App2.WinPhone 
{ 
    public sealed class FixedSVRenderer : ScrollViewRenderer 
    { 
     protected override void OnModelSet() 
     { 
      base.OnModelSet(); 

      if (Model.Orientation == ScrollOrientation.Horizontal) 
      { 
       // Enable horiz-scrolling 
       Control.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto; 
      } 
     } 
    } 
}