如何在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。

请告诉我哪里做错了,或者从代码后面访问模板子项的正确方法是什么?

如何在Silverlight中获取控件模板中的元素

您可以设置ButtonBorderBrush,并将其与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>