Como faço para obter um TabControl para usar a largura total do seu pai?
-
20-08-2019 - |
Pergunta
O componente System.Windows.Forms.TabControl padrão desenha uma borda em torno das TabPages que ele contém. Se você definir seu Dock para Fill, essas fronteiras correr até a borda do controle pai, mas eles ainda estão lá, ocupando espaço na tela.
No Visual Studio, se você encaixar duas janelas no mesmo lugar, você tem um conjunto TabControl-like de guias ao longo da parte inferior, mas sem fronteiras ao longo dos lados.
É possível obter um TabControl para exibir suas TabPages desta maneira, sem espaço na tela desperdiçado nas laterais? Se possível, eu gostaria de evitar soluções que envolvem a pintura do controle mesmo.
Solução
Usando o controle guia .NET padrão, este não é diretamente possível. Qual é o objetivo final para isso? Você está tentando simular o mesmo tipo de exibição estilo com abas-MDI como o Visual Studio? Se for esse o caso, existem várias soluções de terceiros disponíveis -. Alguma fonte aberta e alguns comercial
As outras respostas sobre como usar a propriedade Anchor em combinação com definição do tamanho por isso é apenas um pouco maior do que o trabalho real janela de poder, mas eu acho que pode parecer um pouco estranho visualmente. Ele deve funcionar independentemente das configurações de tema e de acessibilidade, mas você pode acabar tendo que programaticamente definir o tamanho a ser alguns pixels maior do que o pai.
Outras dicas
- Remova os atributos de altura e largura de TabControl
- definir o alinhamento horizontal e vertical para estiramento
por exemplo. não vai esticar;
<TabControl Height="373" Width="609" HorizontalAlignment="Stretch" Name="tabControl1" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
por exemplo. vai esticar;
<TabControl HorizontalAlignment="Stretch" Name="tabControl1" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
Em vez de usar a propriedade Dock você deve tentar usar a âncora para ancorar cada um dos quatro lados. Então você precisa posicionar o TabControl por isso está posicionado um par de pixels maiores em todos os lados que o pai. Dessa forma, as fronteiras estão escondidos, porque eles não podem ser tiradas quando por trás do controle pai.
<Grid>
<TabControl Name="tabControl1" >
<TabItem Header="tabItem1" Name="tabItem1">
<Grid />
</TabItem>
<TabItem Header="tabItem2" Name="tabItem2">
<Grid />
</TabItem>
<TabItem Header="tabItem3" Name="tabItem3">
<Grid />
</TabItem>
</TabControl>
</Grid>
Anchor os lados esquerdo e direito do controle com o conjunto de largura para a largura do controle pai.
childControl.Anchor = Anchor.Left | Anchor.Right; childControl.Width = parentControl.Width;
Do not Encaixe a TabControl. Esticá-la sobre o designer de modo suas bordas esquerda e direita se estendem para além da janela.