3

複数のタブ ページを持つタブ コントロールがあります。タブを前後にフェードできるようにしたい。タブ コントロールに不透明度オプションが表示されません。あるタブ ページから別のタブ ページに切り替えるときにフェード効果を発生させる方法はありますか?

4

5 に答える 5

2

標準の Windows コントロールには魔法の Fade スイッチはありません。

タブのコンテンツをビットマップにダンプし ( DrawToBitmapまたはCopyFromScreenを使用して)、そのビットマップを TabControl の前に表示し、タブを切り替えて、ビットマップをフェードすることができます。

于 2008-10-31T16:53:24.690 に答える
2

ソリューションを機能させるために行ったことを投稿することにしました。GvSは最も近い答えを持っていて、正しい方向に私のクエストを送ってくれたので、私は彼(彼女かもしれませんが、来てください)に正しい答えのチェックマークを付けました。あるタブから別のタブに「クロスフェード」する方法を理解したことがありませんでした(一方の不透明度を下げ、もう一方の不透明度を上げます)が、ビットマップの上に灰色のボックスをペイントして、ますます灰色にして、グレーの背景にフェードインする効果。次に、2 番目のタブを灰色のビットマップとして開始し、繰り返しごとに徐々に灰色を減らし、タブの画像と組み合わせてフェードアップ効果を与えます。

この解決策は素晴らしいフェード効果につながりますが (私がそう言ったとしても)、非常に直線的です。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);

    }
于 2008-11-09T00:05:13.473 に答える
0

Winform/Webform の仕様が見当たりませんので、WebForm と仮定します...

AJAX AnimationExtender を使用できます。

これに失敗した場合、ページを目的のタブに自動ナビゲートする QueryString を受け入れ、ページ遷移を使用するのが悪い方法 (うまくいく) です。

Winformsの場合、WPFを使用できます:)

于 2008-10-31T18:59:05.573 に答える
0

WPF TabControl は、複数の TabItem を同時に表示する機能を備えていないため、1 つの TabItem から次の TabItem にフェードすることができるとは思いません。

これをエミュレートするには、2 つの をつなぎ合わせ(1 つはタブ ストリップ用、もう 1 つはパネル用) 、後者の にListView効果を追加します。ControlTemplateTabControl と ListView の ControlTemplates を出発点として使用します。

于 2008-11-04T07:20:43.687 に答える
-2

タブ/ページの動作方法によっては、ページにメタ タグを追加することで、ページ レベルで処理できる場合があります。

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

デュレーションを変更して、フェードを長くしたり短くしたりします。これは一般に FAJAX と呼ばれます。

于 2008-11-02T16:28:56.453 に答える