Экспорт индикатора расширения UltraExpandableGroupBox по умолчанию - PullRequest
0 голосов
/ 11 декабря 2019

Я использую UltraExpandableGroupBox в своем приложении WinForms. И я использую стиль Office2003 с ним. Тем не менее, я хотел бы обратить вспять используемые изображения расширенного и свернутого индикатора. Я пытался экспортировать изображения из файла .isl, но эти изображения, похоже, не входят в число экспортируемых изображений. Как мне получить доступ к этим изображениям?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2019

Этого можно добиться с помощью простого DrawFilter . Установите для своего свойства UltraExpandableGroupBox DraFilter следующее:

this.myUltraExpandableGroupBox.DrawFilter = new MyDrawFilter(expandedIndicator, collapsedInidcator);

Затем создайте новый класс с именем MyDrawFilter и дайте ему наследовать IUIElementDrawFilter. Ваш класс фильтра рисования может выглядеть так:

    public class MyDrawFilter : IUIElementDrawFilter
    {
        Image expandedIndicator;
        Image collapsedIndicator;
        public MyDrawFilter(Image expandedIndicator, Image collapsedInidcator)
        {
            this.expandedIndicator = expandedIndicator;
            this.collapsedIndicator = collapsedInidcator;
        }
        public bool DrawElement(DrawPhase drawPhase, ref UIElementDrawParams drawParams)
        {
            if (drawParams.Element is GroupBoxExpansionIndicatorUIElement)
            {
                // if groupbox is expanded change the image with one provided in the constructor
                // as expandedIndicator
                if ((drawParams.Element.Control as UltraExpandableGroupBox).Expanded)
                {
                    (drawParams.Element.ChildElements[0] as ImageUIElement).Image = this.expandedIndicator;
                }
                // else gropbox is collapsed change the image with one provided in the constructor
                // as collapsedIndicator
                else
                {
                    (drawParams.Element.ChildElements[0] as ImageUIElement).Image = this.collapsedIndicator;
                }
            }

            return false;
        }

        public DrawPhase GetPhasesToFilter(ref UIElementDrawParams drawParams)
        {
            // filter when GroupBoxExpansionIndicatorUIElement should be drawn. This element has
            // one child UIElement of ImageUIElement type. This UIElement holds the expansion
            // indicator image.
            if (drawParams.Element is GroupBoxExpansionIndicatorUIElement)
            {
                // we return BeforeDrawChildeElements in order to be able to change the image
                return DrawPhase.BeforeDrawChildElements;
            }

            return DrawPhase.None;
        }
    }
0 голосов
/ 16 декабря 2019

Когда для свойства ViewStyle элемента управления UltraExpandableGroupBox установлено значение GroupBoxViewStyle.Office2003, индикатор «Развернутый / свернутый» использует встроенное растровое изображение. Приведенный ниже код демонстрирует, как это растровое изображение может быть получено из сборки во время выполнения и может быть использовано для обращения к текущим развернутым / свернутым индикаторам:

private void ReverseImage_Click(object sender, EventArgs e)
{
    var imageName = "GroupBox.ExpansionIndicator_Chevron.bmp";
    System.IO.Stream stream = typeof(UltraExpandableGroupBox).Module.Assembly.GetManifestResourceStream(typeof(UltraExpandableGroupBox), imageName);

    if (stream != null)
    {
        // The source bitmap has 7x10px size. 
        var image = Bitmap.FromStream(stream);
        // Converting the image to 16x16 pixels
        ultraExpandableGroupBox1.ExpansionIndicatorExpanded = ResizeImage(image, 16, 16);
        // Rotation
        using (var bmp = new Bitmap(image))
        {
            bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
            image = bmp.Clone() as Image;

            // Exporting bitmap to a file
            bmp.Save(@".\" + imageName, ImageFormat.Bmp);
        }                
        ultraExpandableGroupBox1.ExpansionIndicatorCollapsed = ResizeImage(image, 16, 16);
    }
} 

public static Image ResizeImage(Image image, int new_height, int new_width)
{
    var dest = new Bitmap(new_width, new_height);
    var g = Graphics.FromImage(dest);
    g.InterpolationMode = InterpolationMode.High;
    g.DrawImage(image, (dest.Width - image.Width)/2, (dest.Height-image.Height)/2);
    return dest;
}

Экспортируется в файл растровое изображение индикатора расширенного / свернутоговыглядит как на картинке ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...