none
ScrollViewer - AdaptiveTrigger funktioniert nicht mehr RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    meine Frage bezieht sich auf die App-Entwicklung unter Windows 10.
    Auf einer Page in meiner App gibt es sehr viel Content. Der Content ist auf der Page mit einem Grid gruppiert, das auf die Veränderung der App-Breite reagiert (mittels VisualStates). Das funktioniert auch alles soweit.

    Letztens habe ich aber einen ScrollViewer um das Grid gepackt, um vertikal scrollen zu können. Seitdem funktioniert der VisualStateTrigger nicht mehr, d.h. der Content passt sich nicht mehr an die App-Breite an.
    Hat jemand eine Idee, woran das liegen könnte? Habe bei dem ScrollViewer das horizontale Scrolling bereits deaktiviert, aber das hat nichts bewirkt bezüglich des Triggers.

    Mein Code:

    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled">
    	<Grid  Margin="10,0,10,0">
    		<VisualStateManager.VisualStateGroups>
    			<VisualStateGroup>
    				<VisualState>
    					<VisualState.StateTriggers>
    						<AdaptiveTrigger MinWindowWidth="1000" />
    					</VisualState.StateTriggers>
    					<VisualState.Setters>
    						<!--Content an die Breite anpassen -->
    					</VisualState.Setters>
    				</VisualState>
    			</VisualStateGroup>
    		</VisualStateManager.VisualStateGroups>
    		
    		<!-- Content -->
    		
    	</Grid>
    </ScrollViewer>

    Montag, 28. September 2015 19:02

Alle Antworten

  • Hallo,

    das der ScrollViewer dem Inhalt genügend horizontalen Platz für den Inhalt bietet obwohl die Scrollleiste deaktiviert ist, ist etwas seltsam. Ehe man dem jetzt aber ewig auf den Grund geht, empfehle ich dir den ScrollViewer einfach in das Grid zu packen, so bekommt der VSM nichts mehr von dem mit.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 28. September 2015 21:21
  • Danke für die Rückmeldung!

    In dem Grid sind mehrere Zeilen/Spalten definiert. Der Content verteilt sich über die einzelnen Zellen, manchmal auch mittels ColumnSpan über mehrere Zellen. Ich habe versucht, den Scrollviewer um alle Contentelemente im Grid zu packen, leider gibt das eine Fehlermeldung: "Die Eigenschaft 'Content' wurde mehrfach festgelegt."

    Oder hast du das anders gemeint? Weil wenn ich den ScrollViewer einfach einer Zelle hinzufüge, dann wird ja auch nur in genau dem Contentelement gescrollt und nicht im ganzen Grid.

    Dienstag, 29. September 2015 12:53
  • Da die Lösung offenbar nicht so einfach ist, stelle ich hier mal ein komplett funktionstüchtiges Codebeispiel ein, mit dem der Fehler reproduziert werden kann. Folgendes Problem tritt auf: Mit dem ScrollViewer ordnen sich die Rechtecke beim Verändern der Fensterbreite NICHT neu an; nimmt man den Scrollviewer jedoch einfach raus, funktioniert es. Hier der Code:

    <Page
        x:Class="App4.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App4"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled">
            <Grid  Margin="10,0,10,0" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup>
                            <VisualState>
                                <VisualState.StateTriggers>
                                    <AdaptiveTrigger MinWindowWidth="1000" />
                                </VisualState.StateTriggers>
    
                                <VisualState.Setters>
                                    <Setter Target="Rect2.(Grid.Row)" Value="0" />
                                    <Setter Target="Rect2.(Grid.Column)" Value="1" />
                                    <Setter Target="Rect2.(Grid.ColumnSpan)" Value="1"/>
                                    <Setter Target="Rect1.(Grid.ColumnSpan)" Value="1"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
    
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
    
                    <Rectangle Name="Rect1" Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="0"  Margin="10" Height="170" Fill="Red"/>
                    <Rectangle Name="Rect2" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0"  Margin="10" Height="170" Fill="Green"/>
                    <Rectangle Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="0" Height="400" Margin="10" Fill="BurlyWood"/>
                </Grid>
            </ScrollViewer>
    </Page>

    Hat jemand eine Idee, wie das ganze auch mit dem Scrollviewer funktionieren kann?

    Dienstag, 13. Oktober 2015 15:37