2009-12-22 18 views
11

Sto usando ScrollBar personalizzati creati con ControlTemplates standard, tuttavia quando li applico a un ListBox c'è un angolo in basso a destra che non riesco a trovare in alcun modo per sovrascrivere.Non è possibile disegnare completamente un ListBox/Scrollviewer in WPF

Purtroppo non riesco a pubblicare un'immagine finché non ottengo più punti. Ma l'angolo a cui mi riferisco è quando compaiono sia una barra di scorrimento verticale che orizzontale, c'è uno spazio in basso a destra che è riempito con un colore biancastro che non riesco a ovrerride

+0

Puoi aggiungere il tuo codice per il modello ... potrebbe aiutarti a rispondere alla domanda. –

risposta

10

questa è la parte del codice del template che ho ottenuto per ScrollViewer utilizzando Blend. Ho aggiunto un rettangolo nell'angolo in basso a destra e imposta il riempimento su rosso. Puoi ridimensionarlo allo stesso modo oppure puoi espandere uno ScrollBar per coprire lo spazio usando Grid.RowSpan = "2" per VerticalScrollBar (primo uno) o Grid.ColumnSpan = "2" per HorizontalScrollBar (secondo uno).

<Style TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition/> 
         <RowDefinition Height="Auto"/> 
        </Grid.RowDefinitions> 
        <ScrollContentPresenter Grid.Column="0"/> 
        <ScrollBar Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="1" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
        <ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal" Grid.Row="1" Grid.Column="0" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
        <Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

Ha funzionato. ma mi capita di dire che le prestazioni di esecuzione diminuiscono drasticamente in modo lineare. per mostrare 7000 elementi (relativamente semplici e leggeri) usati per 1-2 secondi, ma con questo approccio potrebbero essere necessari fino a 15-19 secondi. Mi chiedo dove rallentare le prestazioni del rendering. –

0

Due cose che potrebbero aiutare :

1) Utilizzare Snoop per esplorare l'albero degli elementi dell'applicazione, questo potrebbe aiutare a trovare il problema.

2) A seconda di come è stato avviato il controllo, è possibile prendere in considerazione l'avvio da una copia del ListBox standard. Ho riscontrato problemi con determinati controlli quando avvio lo stile da un modello vuoto o parziale.

speranza che aiuta

+0

In realtà ho iniziato da una copia della casella di riepilogo standard (modello estratto con Blend). – DJScrib

Problemi correlati