如何在Silverlight中获取控件模板中的元素
本文关键字:元素 控件 获取 Silverlight | 更新日期: 2023-09-27 18:26:59
我想从代码后面获取控件模板中的元素。
在下面的XAML中,我想获得Border元素"btnOrder",并将颜色从红色更改为代码后面的任何其他颜色。
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel
Name ="st"
Margin="0,3,0,3"
Grid.Row="4"
Orientation="Horizontal">
<Button Name="btn" Height="22" Margin="0,0,25,0">
<Button.Template x:Uid="dd">
<ControlTemplate x:Name="tmp" TargetType="Button">
<Border x:Name="btnBorder" Background="Red">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
</ControlTemplate>
</Button.Template>
Test Button
</Button>
</StackPanel>
</Grid>
</Window>
我尝试过各种方法,比如
GetTemplateChild("btnOrder")object o=模板。FindName("btnOrder",this.btn);
但是这些方法返回null。
请告诉我哪里做错了,或者从代码后面访问模板子项的正确方法是什么?
您可以设置Button
的BorderBrush
,并将其与ControlTemplate中Border
控件的BorderBrush
绑定。
因此,当您从代码后面为Button
设置BorderBrush
时,它将反映到ControlTemplate
中的底层绑定等Border
控件。
<Page.Resources>
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="btnBorder"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
这就是应用Style
的方法
<StackPanel>
<Button Style={StaticResource MyButtonStyle} Name="btn1" Content="Test Button 1"
BorderBrush="Red"/>
<Button Style={StaticResource MyButtonStyle} Name="btn2" Content="Test Button 2"
BorderBrush="Green"/>
</StackPanel>