Переход между страницами вкладок в элементе управления вкладками

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

Это приложение winforms или веб-приложение?

Geoff 30.10.2008 15:09

winform - это не приложение wpf. Пока идея растрового изображения кажется лучшим планом

Matt 05.11.2008 01:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
6 460
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

В стандартном элементе управления Windows нет волшебного переключателя Fade.

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

Я не вижу спецификации Winform / Webform, поэтому предполагаю, что WebForm ...

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

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

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

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

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

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

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

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

Я решил опубликовать то, что я сделал, чтобы мое решение заработало. У 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);

    }

Другие вопросы по теме