Пользовательская кнопка не отображается правильно - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть собственный класс для кнопки с круглым изображением, так как я буду использовать ее несколько раз в своей программе. Я думал, что было бы довольно просто создать класс, унаследовав его от Button и поместив мои настройки в конструктор, но когда я запускаю программу, кнопки являются массивными и простыми (без изображения или текста). Вот мой класс:

public class ImageButton : Button
{
    public Button Button;

    public ImageButton(string filename) : this(HorizontalAlignment.Center, VerticalAlignment.Center, filename)
    { }

    public ImageButton(HorizontalAlignment hAlignment, VerticalAlignment vAlignment, string filename)
    {
        Button = new Button
        {
            Width = 35,
            Height = 35,
            Background = Brushes.Transparent,
            HorizontalAlignment = hAlignment,
            BorderBrush = Brushes.Transparent,
            VerticalAlignment = vAlignment,
            Content = new Image
            {
                Source = new BitmapImage(new Uri("pack://application:,,,/Resources/" + filename))
            }
        };
    }

}

А вот моя реализация одного из экземпляров

private void SetupHeaders(Grid resultGrid)
{
    RowDefinition backbtn = new RowDefinition();
    backbtn.Height = new GridLength(0.2, GridUnitType.Star);
    resultGrid.RowDefinitions.Add(backbtn);
    btn_Return = new ImageButton(HorizontalAlignment.Left, VerticalAlignment.Top, "returnicon.png");
    Grid.SetRow(btn_Return, 0);
    Grid.SetColumn(btn_Return, 0);
    resultGrid.Children.Add(btn_Return);

}

, в котором btn_Return определяется в верхней части класса как просто

ImageButton btn_Return;

Вот изображение одной из кнопок. enter image description here

1 Ответ

0 голосов
/ 13 февраля 2020

В вашем конструкторе вы инициализируете кнопку с вашими свойствами, а затем назначаете ее свойству. Вы никогда не используете инициализированную кнопку. Вы всегда используете ImageButton, который является не чем иным, как унаследованной кнопкой, поэтому вы получаете поведение по умолчанию.

Вы должны изменить свой конструктор.

public ImageButton(HorizontalAlignment hAlignment, VerticalAlignment vAlignment, string filename)
{
    Width = 35;
    Height = 35;
    Background = Brushes.Transparent;
    HorizontalAlignment = hAlignment;
    BorderBrush = Brushes.Transparent;
    VerticalAlignment = vAlignment;
    Content = new Image
    {
        Source = new BitmapImage(new Uri("pack://application:,,,/Resources/" + filename))
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...