在选项卡控件中的选项卡页面之间淡入淡出

时间:2008-10-29 18:48:40

标签: c# .net winforms animation tabcontrol

我有一个带有多个标签页的标签控件。我希望能够来回淡化标签。我没有在Tab控件上看到不透明度选项。当我从一个标签页切换到另一个标签页时,有没有办法导致淡入淡出效果?

5 个答案:

答案 0 :(得分:2)

我决定发布我所做的工作以使我的解决方案正常运行。 GvS有最接近的答案,并且按照正确的方向向我发送了我的任务,因此我给了他(可能是她,但是来了)正确的答案复选标记,因为我不能给自己。 我从来没有弄清楚如何从一个标签到另一个标签“交叉淡入淡出”(将不透明度降低到另一个标签上并将不透明度带到另一个标签上)但是我发现等待在一个位图上绘制一个灰色框,并且灰色越来越多淡入我的背景的效果也是灰色的。然后我开始第二个标签作为灰色位图,我慢慢添加较少的灰色与每次迭代的标签图像相结合,使其具有淡化效果。

这个解决方案可以产生很好的淡入淡出效果(即使我自己这么说),但它非常线性。我将使用随机数生成器为alphablend变量播放一点,看看是否可能使它变得不那么线性,但用户可能会再次欣赏可预测性。顺便说一下,我用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);

    }

答案 1 :(得分:1)

标准Windows控件中没有神奇的淡入淡出开关。

您可以将选项卡的内容转储到位图(使用DrawToBitmapCopyFromScreen?),在TabControl前面显示位图,切换选项卡,然后淡化位图。

答案 2 :(得分:0)

我没有看到Winform / Webform的规范,所以我假设WebForm ......

您可以使用AJAX AnimationExtender。

如果失败了,一种糟糕的方式(可行)就是接受一个QueryString,使页面自动导航到你想要的标签,并使用页面过渡。

对于Winforms,您可以使用WPF:)

答案 3 :(得分:0)

根据标签/页面的工作方式,您可以通过向页面添加元标记在页面级别处理它:

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

只需更改持续时间即可使淡入淡出更长或更短。这通常被称为FAJAX。

答案 4 :(得分:0)

我不相信WPF TabControl可以从一个TabItem淡入到下一个TabItem,因为它不能同时显示多个TabItem。

您可以尝试通过将两个ListView(一个用于标签条,一个用于面板)拼接在一起来模拟这一点,并将效果添加到后者的ControlTemplate中。使用TabControl和ListView的ControlTemplates作为起点。