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

时间:2013-08-08 03:27:39

标签: c# .net wpf silverlight

我想从后面的代码中获取控件模板中的元素。

在下面的XAML中,我想获得边框元素“btnBorder”,并将颜色从红色更改为背后的代码中的任何其他颜色。

<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( “btnBorder”) object o = template.FindName(“btnBorder”,this.btn);

但这些方法返回null。

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

1 个答案:

答案 0 :(得分:0)

您可以设置BorderBrush的{​​{1}},并将其与Button BorderBrush控件绑定在ControlTemplate中。

因此,当您从代码中为Border设置BorderBrush时,它会反映到基础绑定,以及Button中的Border控件。

ControlTemplate

这是您应用<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