2016-04-25 3 views
1

Dieses Problem tritt in einer WPF-Anwendung auf.Canvas-Bildlaufleisten beim Umbrechen von Zeichenfläche in ein Raster

Das Projekt verwendet ein ContentControl, das ein Canvas lädt und in dieses Canvas zeichnet, was auch immer gezeichnet werden muss. Diese Arbeitsfläche hat vertikale und horizontale Bildlaufleisten.

Jetzt muss ich dieses ContentControl in ein Raster, neben einer GroupBox, einbinden. So ersetzt

I:

<ContentControl Grid.Row="1" Content="{Binding Viewer.Content}" Margin="10,10,0,0"/> 

mit:

<Grid Grid.Row="1" x:Name="Load_Grid" Panel.ZIndex="2" Background="DarkGray" Opacity="0.9"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <GroupBox Grid.Column="0" 
       x:Name="Legend_Inserts_Status" 
       Header="Legend" 
       HorizontalAlignment="Left" 
       BorderBrush="#FF4EA8DE" 
       FontSize="10" 
       Foreground="#FF436EFF" 
       Width="80" 
       Visibility="{Binding DisplayLegend,Converter={StaticResource BoolToVis}}"> 
     <Grid> 
      <!--My groupbox content here --> 
     </Grid> 
    </GroupBox> 
    <ContentControl Grid.Column="1" Content="{Binding Viewer.Content}" Margin="10,10,0,0"/> 
</Grid> 

Wenn dies zu tun, mein neues GroupBox macht richtig, wird die Leinwand immer noch angezeigt, aber ohne seine horizontale und vertikale Bildlaufleisten. Gibt es einen Grund warum?

Eigentlich, auch wenn ich die GroupBox kommentieren, werden die Bildlaufleisten entfernt. Es scheint also, dass das Entfernen der Bildlaufleisten durch das Umbrechen des ContentControls in das Raster erfolgt.

Antwort

1

Dies geschieht, weil Sie Ihre Spalte auf AutoWidth festgelegt haben, die per Definition ermöglicht, dass die untergeordneten Elemente dieser Spalte den erforderlichen Speicherplatz und die Größe des Spalteninhalts verwenden.

Indem Sie dies tun, negieren Sie jede Grenze, um die ScrollViewer in die Vorlage ContentControl eingebaut aufzurufen. Im Grunde, weil es nichts zu sagen hat "Hey! Sie dürfen nur x, y Größe sein und wenn Sie über diese Größe gehen, dann brauchen wir Bildlaufleisten." ist eine einfache Art, es auszudrücken. Sie müssen also eine MaxWidth setzen oder eine * oder etwas verwenden, das diese Grenze für die ScrollViewer aufrufen wird.

+0

Thx eine Tonne für die Erklärung Chris. Wissen, dass die erste Spalte (Gridview) eine Sichtbarkeit als wahr oder minimiert hat. Also nehme ich an, dass ich Width = "N *" nicht verwenden kann. Gibt es eine Möglichkeit, den ScrollVewer korrekt darzustellen (seine Bildlaufleisten anzuzeigen) und sich automatisch an die Sichtbarkeit der Gridview anzupassen? –

+0

@ A.D. Ich sehe ein Grid, aber kein GridView. Wenn die eine Spalte Inhalt mit Umschalten der Sichtbarkeit hat, geben Sie ihr die 'Auto'-Breite, so dass sie kollabiert, wenn Kinder nicht vorhanden sind. Dann geben Sie die andere Spalte '*', wo Sie scrollbaren Inhalt lebt und es wird die Schriftrollen aufrufen, wenn sie notwendig sind. –

+0

Wunderbar. Indem die Breite der ersten Spalte als auto und die Breite der zweiten Spalte als 1 * gesetzt wurde, funktionierte es gut. Thx eine Tonne Chris, Sie rocken :) Und Entschuldigung für Dummy-Frage. –

Verwandte Themen