在我们的应用中,我们使用第三方库组件。 我需要在整个模板中只更改一个值。如果没有重新定义模板,我怎么能达到这个目的呢?
例如,controlTemplate:
<ControlTemplate TargetType="{x:Type Label}">
<Border x:Name="PART_MainBorder"
BorderBrush="Black"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter/>
</Border>
</ControlTemplate>
我需要更改PART_MainBorder.BorderBrush
。我怎么能这样做?
我找到了this link,但我无法相信没有其他方法可以做到这一点。
感谢。
答案 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
颜色