2010-01-02 57 views

回答

9

幸運的是,您需要附加到控件的加載事件。此時您可以分配給模板屬性。您可以從資源字典中檢索模板。

例如,讓我們假設你有一個UserControl,它包含一個TextBox,你希望爲UserControl的代碼提供一個不同的模板,並且該模板存儲在UserControls的Resources屬性中。

<UserControl xmlns="Namespaces removed for clarity" > 
    <UserControl.Resources> 
    <ControlTemplate TargetType="TextBox" x:Key="MyTextBox"> 
     <!-- template mark up here --> 
    </ControlTemplate> 
    <UserControl.Resources> 
    <TextBox x:Name="txt" Loaded="txt_loaded" /> 
</UserControl> 

在用戶控件的代碼隱藏你有這樣的代碼: -

void txt_Loaded(object sender, RoutedEventArgs e) 
{ 
    ((TextBox)sender).Template = (ControlTemplate)Resources["MyTextBox"]; 
} 

在這種情況下,我使用文本框本身的加載事件,但是,你也可以使用UserControls加載事件。

void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    txt.Template = (ControlTemplate)Resources["MyTextBox"]; 
}