我有一个带有多个选项卡页面的选项卡控件。我想要能够淡入淡出这些选项卡。我没有在选项卡控件上看到不透明度选项。是否有一种方法可以在我从一个选项卡页面切换到另一个时产生淡入淡出效果?
我有一个带有多个选项卡页面的选项卡控件。我想要能够淡入淡出这些选项卡。我没有在选项卡控件上看到不透明度选项。是否有一种方法可以在我从一个选项卡页面切换到另一个时产生淡入淡出效果?
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);
}
标准的Windows控件中没有魔法淡出开关。
您可以使用DrawToBitmap或CopyFromScreen将选项卡的内容转储为位图,将该位图显示在TabControl前面,切换选项卡,然后淡化位图。
我没有看到关于Winform/Webform的规范,所以我会假设是WebForm...
您可以使用AJAX AnimationExtender。
如果失败,一个不好的方法(但有效)是接受一个QueryString参数来使页面自动导航到你想要的标签,并使用页面转换。
对于WinForms,您可以使用WPF :)
我不相信 WPF 的 TabControl 可以实现从一个 TabItem 淡出到下一个的效果,因为它没有同时显示多个 TabItem 的功能。
您可以尝试通过拼接两个 ListView
(一个用于标签条,一个用于面板)并将效果添加到后者的 ControlTemplate
中来模拟此效果。使用 TabControl 和 ListView 的 ControlTemplate 作为起点。
<meta http-equiv="Page-Enter" content="blendTrans(Duration=0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0)">
只需要更改时间来使渐变变得更长或更短。这通常被称为FAJAX。