2013-12-22 18 views
0

在WPF(VS2013),我創建一個按鈕,像這樣:模板基本可重複使用的按鈕

<Button> 
    <Label>1</Label> 
</Button> 

每個按鈕都將有更多的到它,如標籤,網格的增大的字體大小行/列分配,我可以使用標籤的綁定,以便我可以更改數字。我正在創建一個計算器應用程序,因此我需要重複使用此按鈕10次(每個數字0-9一個)。我不想將這個按鈕XML複製/粘貼10次,而是想看看我是否可以對它進行模板化。

我已經讀了一些關於ControlTemplate和DataTemplate,但我不確定這些是否是正確的使用。我也不清楚應該是什麼樣的風格或什麼應該是模板。因此,如果有人能夠幫助我理解如何對按鈕及其樣式(例如寬度,高度,字體大小等)進行「模板化」,以便它們可以很容易地重用,那將有助於大量的工作。指導表示讚賞!

回答

2

使用時要覆蓋一個控制整個模板,使用DataTemplate當你想告訴WPF如何繪製一個數據對象(通常是DataContext),並使用ContentTemplate當你想告訴WPF如何ControlTemplate繪製一個對象的Content屬性。

創建一個全新的ControlTemplate是相當複雜的。爲了演示,請this MSDN example爲一個Button一個例子ControlTemplate

在你的情況,我會建議爲你的按鈕Style與制定者共同屬性,如HeightWidthFont等,如果你想畫你的按鈕在自定義的方式Content屬性,而不完全覆蓋按鈕模板,包含ContentTemplate樣式設置器,以告訴WPF如何繪製Button.Content屬性。

<Button Style="{StaticResource CalculatorButton}" Content="1" /> 

<Style x:Key="CalculatorButton" TargetType="{x:Type Button}"> 
    <Setter Property="Height" Value="50"/> 
    <Setter Property="Width" Value="50"/> 
    <Setter Property="FontSize" Value="14" /> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="{Binding }" FontFamily="Wingdings 3" FontWeight="Bold" FontSize="18" Foreground="Navy" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ControlTemplate定義按鈕看上去如何,所述ContentTemplate定義Button.Content長相如何,並且用於ContentTemplateDataTemplate是定義如何的「1」中的數據對象將畫。

+0

這看起來非常好。一些問題:(1)'{Binding}'應該是空的嗎?這是否告訴它查看在XAML中添加每個按鈕時指定的'Content'屬性? (2)你的最後一個'Setter'指定了'Value ='並且在它下面有另一個'',這是錯誤的嗎? –

+0

對於這兩個問題都是肯定的:)'{Binding}'應該是空的,所以它只會顯示當前數據上下文是什麼,在本例中就是'Button.Content',在我的例子中我有一個錯誤,已經設置了兩次「Value」屬性。我會編輯我的答案,刪除該,謝謝。 – Rachel

+0

謝謝!還有最後一個問題......你怎麼知道'Button.Content'是它會引用的數據上下文?我不熟悉它是這種事情的「搜索模式」。 –

0

您需要創建一個新的按鈕樣式。學習曲線不是太陡峭,但好處是巨大的。您可以在這裏開始學習:http://msdn.microsoft.com/en-us/library/ms745683(v=vs.110).aspx

長話短說:用Blend打開您的項目,右鍵單擊您的按鈕,「編輯樣式」,「編輯副本」。如果您選擇在應用程序定義它,你可以重複使用其他頁面中(這將是隨後在你App.xaml文件)

一旦你的基本樣式,編輯它,你需要儘可能多的。

+0

Straightly我沒有一個「編輯樣式」選項,只有「編輯模板」,它創建了''而不是'