Почему делает наследование изменения Кнопки WPF появление изображения на панели инструментов

С помощью следующего кода 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 является простым наследованием Кнопки, никакого другого кода.

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

Порядок я добавляю кнопки к панели инструментов, не имеет никакого значения. Это - странное появление btn2 перемещается в местоположение, что это добавляется к панели инструментов.

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

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

и

btn1. DependencyObjectType. IsSecurityTransparent=True btn2. DependencyObjectType. IsSecurityTransparent=False

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

1
задан Tim Murphy 22 June 2010 в 06:15
поделиться

1 ответ

Проверьте свой 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}" />
2
ответ дан 2 September 2019 в 23:36
поделиться
Другие вопросы по тегам:

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