在代码隐藏中修改模板

时间:2013-06-17 12:58:38

标签: wpf

在我们的应用中,我们使用第三方库组件。 我需要在整个模板中只更改一个值。如果没有重新定义模板,我怎么能达到这个目的呢?

例如,controlTemplate:

<ControlTemplate TargetType="{x:Type Label}">
        <Border x:Name="PART_MainBorder"
                BorderBrush="Black" 
                BorderThickness="{TemplateBinding BorderThickness}">
            <ContentPresenter/>
        </Border>            
</ControlTemplate>

我需要更改PART_MainBorder.BorderBrush。我怎么能这样做?

我找到了this link,但我无法相信没有其他方法可以做到这一点。

感谢。

1 个答案:

答案 0 :(得分:2)

我确信在XAML中有更优雅的方法可以做到这一点,但回答你的问题模板只不过是一个cookie计算器,所以你不能只是开始在后面的代码中更改模板对象的属性。您可以通过已应用模板的控件修改模板控件属性。在ControlTemlate的情况下,它将是模板控件,对于DataTemplate,它将ContentPresenter用于生成内容。因此,假设您在上面应用了2 Labels个模板:

<Label Content="A" x:Name="Label1"/>
<Label Content="B" x:Name="Label2"/>

然后在代码中您可以像这样更改Border.BorderBrush

(Label1.Template.FindName("PART_MainBorder", Label1) as Border).BorderBrush = new SolidColorBrush(Colors.Red);
(Label2.Template.FindName("PART_MainBorder", Label2) as Border).BorderBrush = new SolidColorBrush(Colors.Orange);

值得注意的是,2 Labels会有不同的 BorderBrush颜色