代码之家  ›  专栏  ›  技术社区  ›  Tim Murphy

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

  •  1
  • Tim Murphy  · 技术社区  · 15 年前

    使用以下代码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=false btn2.DependencyObjectType.IsSecurityCritical=真

    btn1.DependencyObjectType.IsSecurityTransparent=真 btn2.DependencyObjectType.IsSecurityTransparent=false

    还有什么需要我调查的吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Franci Penov    15 年前

    检查XAML以获取应用于 MyButton .

    更新 :标准WPF主题包括已知控件的默认样式。你的 MyBut纽 不是其中之一。您需要使用类的样式扩展主题字典,或者需要声明基于 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}" />
    
    推荐文章