在标签控件中实现标签页面之间的渐变切换

3

我有一个带有多个选项卡页面的选项卡控件。我想要能够淡入淡出这些选项卡。我没有在选项卡控件上看到不透明度选项。是否有一种方法可以在我从一个选项卡页面切换到另一个时产生淡入淡出效果?


这是一个WinForms应用程序还是Web应用程序? - Geoff
winform不是wpf应用程序。到目前为止,位图的想法似乎是最好的计划。 - Matt
5个回答

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);

    }

2

标准的Windows控件中没有魔法淡出开关。

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


0

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

您可以使用AJAX AnimationExtender。

如果失败,一个不好的方法(但有效)是接受一个QueryString参数来使页面自动导航到你想要的标签,并使用页面转换。

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


0

我不相信 WPF 的 TabControl 可以实现从一个 TabItem 淡出到下一个的效果,因为它没有同时显示多个 TabItem 的功能。

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


-2
根据您的选项卡/页面的工作方式,您可以通过向页面添加元标记来在页面级别上处理它:
<meta http-equiv="Page-Enter" content="blendTrans(Duration=0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0)">

只需要更改时间来使渐变变得更长或更短。这通常被称为FAJAX。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接