2012-06-22 106 views
0

我有一個C#WPF應用程序,我需要用不同顏色創建一堆圖像/文本按鈕。爲此,我創建了一個從Button類派生的ImageButton。如何將樣式綁定到模板?

我希望我的按鈕有圓角,所以我創建了以下控件模板:

<ControlTemplate x:Key="RoundedButtonTemplate" TargetType="{x:Type MyProject:ImageButton}"> 
     <Grid> 
      <Border x:Name="border" Background="WHAT DO I PUT HERE?" CornerRadius="10"/> 
     </Grid>   
    </ControlTemplate> 

現在我希望能夠輕鬆地僅僅通過在XAML改變樣式來更改邊框的顏色上面, 。我有以下樣式定義。

綠色按鈕樣式:

<Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}"> 
     <Setter Property="Background" Value="{DynamicResource GreenButtonBrush}"/> 
RoundedButtonTemplate}"/> 
    </Style> 

藍色按鈕樣式:

<Style x:Key="GreenButtonStyle" TargetType="{x:Type MyProject:ImageButton}"> 
     <Setter Property="Background" Value="{DynamicResource BlueButtonBrush}"/> 
RoundedButtonTemplate}"/> 
    </Style> 

我的客戶端代碼如下所示:

<local:ImageButton HorizontalAlignment="Left" Margin="24,19.234,0,20" Width="97" Grid.Row="3" Style="{DynamicResource GreenButtonStyle}" Template="{DynamicResource RoundedButtonTemplate}"/> 

我的問題是如何使模板知道使用哪種風格?我嘗試添加以下屬性到我的風格,但並沒有多少成功:

<Setter Property="Template" Value="{DynamicResource RoundedButtonTemplate}"/> 

回答

0

我猜的ImageButton從用戶控件繼承,因爲這是一個複合控件。如果沒有,你可能應該。 MSDN討論了從Control到UserControl的繼承。我會把邊框放在那裏,並在一個按鈕和一個TextBlock或其他東西。

做到這一點的一種方法是在你的新ImageButton類上定義一個依賴屬性,例如「BorderBackground」。您可以將它鏈接起來,以便在設置時更改邊框的背景顏色。如果你喜歡,我可以提供示例代碼。

設置樣式時,目標屬性爲「BorderBackground」。這將消除對ControlTemplate進行任何更改的需求,我通常會盡量避免這些更改。

這有幫助嗎?

或者回答您的原始問題,我不確定模板是否知道如何應用樣式,因爲您的樣式的目標是ImageButton控件的背景,而不是背景的邊框控件。

相關問題