Frage

Ich habe einen Tab Control mit mehreren Registerkarten. Ich möchte die Reiter in der Lage hin und her zu verblassen. Ich habe keine Opazität Option auf der Registerkarte Steuerelemente sehen. Gibt es eine Möglichkeit, einen Fade-Effekt zu verursachen, wenn ich von einer Registerkarte zu einem anderen wechseln?

War es hilfreich?

Lösung

Es gibt keinen magischen Fade-Schalter in der Standard-Windows-Steuerung.

Sie können den Inhalt des Registerkarte in einem Bitmap-Dump (mit DrawToBitmap oder CopyFromScreen ?), zeigt, dass der Bitmap vor dem TabControl, Schaltklappen, und dann die Bitmap verblasst.

Andere Tipps

Ich beschloss, zu schreiben, was ich tat, um meine Lösung zum Laufen zu bringen. GvS hatte die nächste Antwort und schickte mich auf meiner Suche in die richtige Richtung, damit ich ihm gab (vielleicht ein ihr sein, sondern kommen auf) die richtige Antwort Häkchen da ich es nicht selbst geben kann. Ich habe nie herausfinden, wie man „überblenden“ von einer Registerkarte zu einer anderen (bringen Opazität nach unten auf ein und Opazität auf der anderen Seite bringen), aber ich fand eine Wartezeit ein graues Feld über eine Bitmap zu malen mit mehr und mehr graue es geben die Wirkung in meinem Hintergrund verblassen die auch grau. Dann beginne ich die zweite Registerkarte als Bitmap von Grau, das ich langsam fügen weniger grau mit der Registerkarte Bild kombiniert jede Iteration es einen Fade-up-Effekt.

Diese Lösung führt zu einem netten Fade-Effekt (auch wenn ich so selbst sage), aber es ist sehr linear. Ich werde ein wenig mit einem Random Number Generator für die Alphablend Variable spielen und sehen, ob das könnte es etwas weniger linear machen, aber dann wieder die Benutzer möglicherweise die Vorhersagbarkeit zu schätzen wissen. Btw, ich mit einem button_click den Schalter Registerkarte Ereignis ausgelöst.

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

    }

Ich sehe nicht, eine Spezifikation von Winform / Webform, also werde ich Webformular übernehmen ...

Sie können eine AJAX AnimationExtender verwenden.

Gelingt das nicht, eine schlechte Art und Weise würde (was funktionieren wird), eine Abfrage-Zeichenfolge zu akzeptieren, um die Seite zu bewirkt, dass Auto-Navigation auf die Registerkarte, die Sie mögen, und Seitenübergänge verwendet werden.

Für WinForms, könnte man WPF verwenden:)

Ich glaube nicht, dass die WPF TabControl gebracht werden kann, von einem TabItem zum nächsten zu verblassen, da sie nicht gleichzeitig mehr TabItems anzuzeigen ausgestattet ist.

Sie könnten versuchen, dies zu emulieren, indem zwei ListViews Vernähen (eine für die Tableiste und eines für die Platte) und die Wirkung in die ControlTemplate des letzteren hinzuzufügen. Verwenden Sie die Control des TabControl und dem Listview als Ausgangspunkt.

Je nachdem, wie Sie Ihr Tabs / Seite arbeiten, können Sie in der Lage sein, sie durch Zugabe von Meta-Tags auf der Seite auf Seitenebene zu behandeln:

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

Nur die Dauer ändert die Fade länger oder kürzer zu machen. Dies wird allgemein als FAJAX.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top