为什么继承WPF按钮会更改工具栏中图像的外观

时间:2010-06-22 06:15:02

标签: .net wpf vb.net .net-4.0

使用以下代码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的属性比较为2级,除了:

之外只有预期的差异

btn1.DependencyObjectType.IsSecurityCritical =假 btn2.DependencyObjectType.IsSecurityCritical =真

btn1.DependencyObjectType.IsSecurityTransparent =真 btn2.DependencyObjectType.IsSecurityTransparent =假

我还应该研究其他什么?

1 个答案:

答案 0 :(得分:2)

检查XAML是否适用于MyButton

的默认样式

更新:标准WPF主题包含众所周知的控件的默认样式。您的MyButton不是其中之一。您需要为您的类扩展主题字典,或者您需要为您的类声明基于Button样式的默认样式。

这是您可以尝试添加到资源字典中的最简单样式(其中local:是CLR命名空间的XAML声明 - 您需要将其添加到根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}" />