2008-10-29 120 views
2

我有一個具有多個選項卡頁面的選項卡控件。我希望能夠使標籤來回消失。我沒有看到Tab控件上的不透明選項。當我從一個標籤頁切換到另一個標籤頁時,是否有辦法導致淡入淡出效果?在選項卡控件中的選項卡頁面之間淡入淡出

+0

這是一個winforms應用程序或網絡應用程序? – Geoff 2008-10-30 12:09:09

回答

1

標準窗口控件中沒有神奇的淡入淡出開關。

您可以將選項卡的內容轉儲爲位圖(使用DrawToBitmapCopyFromScreen?),在TabControl前顯示該位圖,切換選項卡,然後淡入淡出位圖。

0

我沒有看到WinForm的/網絡表單的規範,所以我會承擔的WebForm ...

您可以使用AJAX AnimationExtender。

如果失敗,那麼一種不好的方法就是接受一個QueryString,它會導致頁面自動導航到你想要的標籤,並使用頁面轉換。

有關的WinForms,你可以使用WPF :)

0

根據如何您的標籤/頁的工作,您可以通過添加meta標籤的頁面在頁面級別來處理它:

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

只需更改持續時間,使淡出時間更長或更短。這通常被稱爲FAJAX。

0

我不相信WPF TabControl可以從一個TabItem淡入到下一個,因爲它不能同時顯示多個TabItem。

您可以嘗試通過將兩個ListView s(一個用於標籤條和一個用於面板)拼接在一起,並將效果添加到後者的ControlTemplate中。使用TabControl和ListView的ControlTemplates作爲起點。

2

我決定發佈我做的解決方案。 GvS有最接近的答案,並且以正確的方向將我發送給我,所以我給了他(可能是她,但來了)正確答案複選標記,因爲我不能給自己。 我從來沒有弄清楚如何從一個標籤「交叉淡化」到另一個標籤(爲其中一個帶來不透明度,並在另一個標籤上帶來不透明度),但是我發現等待在灰度框上繪製一個灰度越來越多的灰色圖像褪色到我的背景也是灰色的效果。然後我開始第二個選項卡作爲灰色的位圖,我慢慢地添加較少的灰色結合選項卡圖像每次迭代給它淡入淡出效果。

該解決方案帶來了很好的淡入淡出效果(即使我自己也這樣說),但它非常線性。我打算使用alphablend變量的隨機數生成器,看看它是否會使線性變小,但用戶可能會再次意識到可預測性。順便說一句,我用button_click來觸發switch選項卡事件。

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

    } 
相關問題