2011-04-04 11 views
8

El TabControl de WPF con su TabPanel predeterminado arregla elementos de tabulación en múltiples filas cuando el tamaño horizontal es demasiado pequeño. Luego, la selección de pestañas cambia el orden de estas filas, por lo que la pestaña seleccionada está siempre en la primera fila.WPF multilínea TabControl sin reorganizar filas

Encontré varios artículos sobre cómo reemplazar TabPanel con otro control de elementos para que en lugar del comportamiento de varias líneas obtengan pestañas de desplazamiento.

Me gustaría mantener las filas múltiples (sin desplazamiento), pero deshabilitar la reordenación de filas. Una vez que se crean las pestañas, deben permanecer en su posición, sin importar cómo cambie la selección. es posible?

+0

esto probablemente sea posible, pero tenga en cuenta que si selecciona una pestaña en la fila superior y las filas no cambian, tiene un encabezado de pestaña que está desconectado de una pestaña (lo que puede ser incómodo). Entonces, ¿eso es realmente lo que quieres? –

+0

Puede que tenga razón, pero también he personalizado su apariencia, y en este caso particular, la desconexión no es un problema. – vigoo

+0

Esto también es un problema, lástima que no hay solución. El cambio de fila de las pestañas multirrutas evita que el ojo recuerde su patrón y dificulta el reordenamiento al arrastrarlo. Impide la atención y puede ser frustrante una vez que se reconoce. – strainer

Respuesta

0

La única solución que encontré fue la modificación de la clase TabPanel del marco de modo que su método int GetActiveRow(int[] solution) siempre devuelve 0. A pesar de esto resuelve el problema, no estoy seguro de que es legal el uso de la fuente del marco de esta manera.

3

¿Ha intentado anular el estilo predeterminado con algo como esto? es decir: ¿se usa un wrappanel en lugar de un TabPanel?

<Style x:Key="{x:Type TabControl}" TargetType="{x:Type TabControl}">   
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabControl}">      
       <Grid TabNavigation="Local" SnapsToDevicePixels="true" ClipToBounds="true"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Name="ColumnDefinition0" /> 
         <ColumnDefinition Name="ColumnDefinition1" Width="0" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Name="RowDefinition0" Height="Auto" /> 
         <RowDefinition Name="RowDefinition1" Height="*" /> 
        </Grid.RowDefinitions> 
        <WrapPanel Name="HeaderPanel" ZIndex="1" TabIndex="1" Column="0" Row="0" Margin="2,2,2,0" IsItemsHost="true" /> 
        <Border Name="ContentPanel" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" TabNavigation="Local" DirectionalNavigation="Contained" TabIndex="2" Column="0" Row="1"> 
         <ContentPresenter Name="PART_SelectedContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Margin="{TemplateBinding Padding}" ContentSource="SelectedContent" /> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>