2010-01-02 58 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"]; 
}