2009-12-22 30 views
11

Estoy usando barras de desplazamiento personalizadas que creamos usando ControlTemplates estándar, sin embargo cuando las aplico a un ListBox hay una esquina en la parte inferior derecha que no puedo encontrar de ninguna manera para anular.No se puede diseñar completamente un ListBox/Scrollviewer en WPF

Lamentablemente no puedo publicar una imagen hasta que obtengo más puntos. Pero la esquina a la que me refiero es cuando aparecen una barra de desplazamiento vertical y otra horizontal, hay un espacio en la esquina inferior derecha que está relleno de un color grisáceo que no puedo ovrerride

+0

Puede agregar su código para la plantilla ... podría ayudar respondiendo la pregunta. –

Respuesta

10

esta es la parte del código de la plantilla que tengo para ScrollViewer utilizando Blend. Agregué un rectángulo en la esquina inferior derecha y configuré el relleno en rojo. Puede diseñarlo de la misma manera o puede expandir uno de ScrollBar para cubrir el espacio usando Grid.RowSpan = "2" para VerticalScrollBar (el primero) o Grid.ColumnSpan = "2" para HorizontalScrollBar (el segundo).

<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

Funcionó. pero resulta que el rendimiento de la ejecución disminuye drásticamente de forma lineal. para mostrar 7000 elementos (elemento relativamente simple y ligero) solía necesitar 1-2 segundos, pero con este enfoque podría ser de hasta 15-19 segundos. Me pregunto dónde ralentizar el rendimiento del render. –

0

Dos cosas que podrían ayudar :

1) Use Snoop para explorar el árbol de elementos de su aplicación, esto podría ayudar a encontrar el problema.

2) Dependiendo de cómo comenzó su control, puede considerar comenzar desde una copia del ListBox estándar. He encontrado problemas con ciertos controles cuando comienzo a diseñar desde una plantilla vacía o parcial.

esperanza de que ayuda a

+0

De hecho, comencé con una copia del cuadro de lista estándar (plantilla extraída usando Mezcla). – DJScrib

Cuestiones relacionadas