如何访问ControlTemplate内部的控件

时间:2013-10-16 19:45:02

标签: c# silverlight xaml code-behind

如何从代码隐藏中访问我的btnViewTable?特别是能够设置可见性打开或关闭,甚至删除它。我查看了GetTemplateChild和FindName,但一直无法访问该按钮。我可以设法获得对ControlTemplate的引用,但不能得到更多。

<Grid x:Name="pnlSearch" Background="White">
<TextBlock x:Name="txtSearchResults" />
<sdk:DataGrid x:Name="grdResults">
<sdk:DataGrid.Columns>
    <sdk:DataGridTextColumn Binding="{Binding Value}"/>
    <sdk:DataGridTextColumn Binding="{Binding FoundFieldName}"/>
</sdk:DataGrid.Columns>
<sdk:DataGrid.RowGroupHeaderStyles>
    <Style TargetType="sdk:DataGridRowGroupHeader">
    <Setter Property="Template">
        <Setter.Value>
        <ControlTemplate TargetType="sdk:DataGridRowGroupHeader">
            <sdk:DataGridFrozenGrid Name="Root">
            <StackPanel>
                <Button x:Name="btnViewTable"

3 个答案:

答案 0 :(得分:0)

var button = (Button)DataGrid.Template.FindName("btnViewTable", "DataGridControl");
button.Click += //Do something;

DataGrid / DataGridControl是实际的DataGridControl

答案 1 :(得分:0)

要从控件外部处理部分模板,总是一个不太好的想法。

为了快速解决问题,我会选择:

<Style TargetType="sdk:DataGridRowGroupHeader">
    <Setter Property="Tag" Value="{Binding SomeVisibilityProperty}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="sdk:DataGridRowGroupHeader">
                <Grid
                    <sdk:DataGridFrozenGrid Name="Root">
                    <StackPanel>
                        <Button x:Name="btnViewTable"
                                Visibility="{TemplateBinding Tag}"

其中SomeVisibilityProperty是数据上下文中的属性。可能需要使用RelativeSource

对于“真正的”修复,我会定义一个附加属性。将此属性设置为绑定到父网格上的相同属性,然后将按钮绑定到DataGridRowGroupHeader上的属性。

答案 2 :(得分:0)