Почему наследование кнопки WPF меняет внешний вид изображения на панели инструментов - PullRequest
1 голос
/ 22 июня 2010

Использование следующего кода btn2 выглядит иначе, чем btn1 и btn3, но они используют одно и то же изображение.

Public Class MyToolBar
    Inherits ToolBar

    Public Sub New()
        MyBase.New()

        Dim bmp1 = New BitmapImage(ImageUri.DeleteItem)
        Dim bmp2 = New BitmapImage(ImageUri.DeleteItem)
        Dim bmp3 = New BitmapImage(ImageUri.DeleteItem)
        Dim img1 = New Image With {.Source = bmp1}
        Dim img2 = New Image With {.Source = bmp2}
        Dim img3 = New Image With {.Source = bmp3}

        Dim btn1 = New Button With {.Content = img1}
        Dim btn2 = New MyButton With {.Content = img2}
        Dim btn3 = New Button With {.Content = img3}

        Me.AddChild(btn1)
        Me.AddChild(btn2)
        Me.AddChild(btn3)

    End Sub

End Class

Public Class MyButton
    Inherits Button
End Class

Единственное отличие в коде - это btn2, созданный с помощью MyButton.MyButton - это простое наследование Button, никакого другого кода.

btn1 & btn3 отображаются так, как ожидается;плоский.btn2 выглядит полуподнятым и имеет черную рамку.

Порядок, в котором я добавляю кнопки на панель инструментов, не имеет значения.То есть - странный вид btn2 перемещается в то место, куда он добавлен на панель инструментов.

Я выгрузил и сравнил свойства двух уровней btn1 и btn2, и есть только ожидаемые различияза исключением:

btn1.DependencyObjectType.IsSecurityCritical = False btn2.DependencyObjectType.IsSecurityCritical = True

и

btn1.DependencyObjectTyTecurity.bject.Security.bjects.jects

Что-нибудь еще, что я должен изучить?

1 Ответ

2 голосов
/ 22 июня 2010

Проверьте свой XAML для стиля по умолчанию, который применяется к MyButton.

Обновление : стандартные темы WPF включают стили по умолчанию для известных элементов управления. Ваш MyButton не один из них. Вам необходимо расширить словарь темы стилем для вашего класса или объявить стиль по умолчанию для вашего класса, основанный на стиле Button.

Вот самый простой стиль, который вы можете попробовать добавить в свой словарь ресурсов (где local: - это объявление XAML вашего пространства имен CLR - вам нужно добавить его к корневому элементу XAML)

<Style BasedOn="{StaticResource {x:Type Button}}"
       TargetType="{x:Type local:MyButton}" />

Обновление 2 : если ваша кнопка является частью панели инструментов, попробуйте вместо этого (:-P):

<Style BasedOn="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
       TargetType="{x:Type local:MyButton}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...