Pergunta

Eu tenho um controle guia com várias páginas de guia. Eu quero ser capaz de desaparecer as guias para trás e para frente. Eu não vejo uma opção de opacidade sobre os controles de guia. Existe uma maneira para causar um efeito de fade quando eu mudar de um Tab página para outra?

Foi útil?

Solução

Não há mágica interruptor desvanece-se no controle de janelas padrão.

Você poderia despejar o conteúdo da guia para um bitmap (usando DrawToBitmap ou CopyFromScreen ?), mostram que bitmap em frente à TabControl, guias de switch, e em seguida, desaparecer o bitmap.

Outras dicas

Eu decidi postar o que eu fiz para chegar a minha solução de trabalho. GVS teve a resposta mais próxima e enviou-me em minha busca na direção certa, então eu dei-lhe (pode ser uma dela, mas vamos lá) a marca de verificação resposta correta já que não posso dá-lo a mim mesmo. Eu nunca fiz descobrir como "crossfade" de uma guia para outra (opacidade trazer para baixo em um e trazer opacidade em cima da outra), mas eu achei uma espera para pintar uma caixa cinza ao longo de um bitmap com mais e mais cinza dando-lhe a efeito de atenuação em meu fundo que também é cinza. Então eu começo a segunda aba como um bitmap de cinza que eu adicione lentamente menos cinza combinado com a imagem guia cada iteração dando-lhe um fade-se em vigor.

Esta solução conduz a um efeito de fade agradável (mesmo se eu me dizê-lo), mas é muito linear. Vou jogar um pouco com um gerador de números aleatórios para a variável AlphaBlend e ver se isso pode torná-lo um pouco menos linear, mas mais uma vez os usuários podem apreciar a previsibilidade. Btw, eu acionar o evento guia interruptor com uma button_click.

using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

public int alphablend;
public Bitmap myBitmap;

    private void button1_Click(object sender, EventArgs e)
    {
        alphablend = 0;
        pictureBox1.Visible = true;
        myBitmap = new Bitmap(tabControl1.Width, tabControl1.Height);
        while (alphablend <= 246)
        {
            tabControl1.DrawToBitmap(myBitmap, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));
            alphablend = alphablend + 10;
            pictureBox1.Refresh();//this calls the paint action
        }
        tabControl1.SelectTab("tabPage2");
        while (alphablend >= 0)
        {
            tabControl1.DrawToBitmap(myBitmap, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));
            alphablend = alphablend - 10;               
            pictureBox1.Refresh();//this calls the paint action
        }
        pictureBox1.Visible = false;
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Graphics bitmapGraphics = Graphics.FromImage(myBitmap);

        SolidBrush greyBrush = new SolidBrush(Color.FromArgb(alphablend, 240, 240, 240));

        bitmapGraphics.CompositingMode = CompositingMode.SourceOver;

        bitmapGraphics.FillRectangle(greyBrush, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));

        e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;

        e.Graphics.DrawImage(myBitmap, 0, 0);

    }

Eu não vejo uma especificação de Winform / Webform, então eu vou assumir WebForm ...

Você pode usar um AJAX AnimationExtender.

Na falta deste, um mau caminho (que iria trabalhar) seria aceitar uma QueryString que faz com que a página para auto-navegar até a aba que você quer, e página uso Transitions.

Para WinForms, você poderia usar WPF:)

Eu não acredito que o WPF TabControl pode ser trazido a desvanecer-se de um TabItem para o outro, uma vez que não está equipado para exibir várias TabItems simultaneamente.

Pode-se tentar emular este por costura em conjunto dois ListViews (um para a faixa de guia e um para o painel) e adicionar o efeito na ControlTemplate deste último. Use as ControlTemplates do TabControl eo ListView como ponto de partida.

Dependendo de como o guias / obra página, você pode ser capaz de lidar com isso no nível da página, adicionando meta tags para a página:

<meta http-equiv="Page-Enter" content="blendTrans(Duration=0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0)">

Apenas alterar a duração de fazer o fade mais ou menos longo. Isto é comumente referido como FAJAX.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top