【问题标题】:How to get the element in the control template in Silverlight?Silverlight中如何获取控件模板中的元素?
【发布时间】:2013-08-08 03:27:39
【问题描述】:

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

在下面的 XAML 中,我想获取 Border 元素“btnBorder”,并将颜色从红色更改为 code behind 中的任何其他颜色。

<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。

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

【问题讨论】:

    标签: c# .net wpf silverlight


    【解决方案1】:

    您可以设置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>
    

    【讨论】:

    • 感谢 Nitesh 的回复,但我有 7-8 个此按钮的实例,那么如何区分这些实例。我的意思是我需要为不同的按钮设置不同的颜色。
    • 所以创建一个样式并将其应用于您的按钮。
    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多