2010-06-22 46 views
1

使用以下代碼btn2看起來與btn1和btn3不同,但它們使用完全相同的圖像。爲什麼繼承WPF按鈕會改變工具欄中圖像的外觀

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的奇怪外觀移動到它被添加到工具欄的位置。

我甩了,並比較了性能,2級,BTN1和BTN2的,並且只有除了預期的差異:

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

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

還有什麼我應該看看?

回答

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}" /> 
+0

您是到那裏的東西。我沒有使用任何樣式,除了這是一個使用http://wpfthemes.codeplex.com/的選項,並且當我應用這些主題時,btn1&btn3適當更改,但btn2保持不變。 因此,我猜測標準的WPF沒有任何暗示的代碼中的按鈕樣式的btn1&btn3。 廢話。 WPF中的另一件事是學習! – 2010-06-22 06:30:10

+0

非常感謝您的幫助。您的樣式對於按鈕是正確的,但由於按鈕是工具欄的一部分,所以正確的樣式是