Вопрос по animation, c#, winforms, .net, tabcontrol – Переход между вкладками в элементе управления вкладками

2

У меня есть вкладка управления с несколькими вкладками. Я хочу быть в состоянии исчезать вкладки вперед и назад. Я не вижу опцию непрозрачности в элементах управления вкладками. Есть ли способ вызвать эффект затухания при переключении с одной вкладки на другую?

Или это приложение WPF? Justin Bozonier
Winform не приложение wpf. Пока что идея растрового изображения кажется лучшим планом Matt
Это приложение winforms или веб-приложение? Geoff

Ваш Ответ

5   ответов
0

как работают ваши вкладки / страницы, вы можете обрабатывать их на уровне страницы, добавляя на страницу метатеги:

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

Просто измените продолжительность, чтобы сделать затухание длиннее или короче. Это обычно называют FAJAX.

0

поэтому я предполагаю, что WebForm ...

Вы можете использовать AJAX AnimationExtender.

В противном случае плохим способом (который будет работать) было бы принять QueryString, которая заставляет страницу автоматически переходить на нужную вкладку, и использовать переходы страницы.

Для Winforms вы можете использовать WPF :)

1

Fade.

Вы можете сбросить содержимое вкладки в растровое изображение (используяDrawToBitmap или жеCopyFromScreen?), показать это растровое изображение перед TabControl, переключать вкладки, а затем исчезать растровое изображение.

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

    }
0

что WPF TabControl может постепенно исчезать с одного TabItem на другой, поскольку он не оборудован для одновременного отображения нескольких TabItems.

Вы могли бы попытаться подражать этому, соединяя дваListViews (один для вкладки и один для панели) и добавьте эффект вControlTemplate из последних. Используйте ControlTemplates TabControl и ListView в качестве отправной точки.

Похожие вопросы