如何访问Silverlight DataGrid列标题模板中的控件?

时间:2014-08-20 14:28:52

标签: c# silverlight datagrid header

我要求列标题是超链接,超级链接的内容在后面的代码中设置。

这是我的数据网格列的HeaderTemplate样式。

<Style x:Name="dataGridHeaderCenterStyleWithLink" TargetType="dataprimitives:DataGridColumnHeader">
    <Setter Property="Foreground" Value="#FF000000" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="FontWeight" Value="Bold" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="SeparatorBrush" Value="#FFC9CACA" />
    <Setter Property="Padding" Value="2" />        
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="dataprimitives:DataGridColumnHeader">
                <Grid Name="Root">
                    <StackPanel>
                        <HyperlinkButton x:Name="hlHeader" Content="Command 0" HorizontalAlignment="Center" MinWidth="20"   Tag="Title"  />

                    </StackPanel>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

因此,在代码中,我想访问“超链接”按钮并根据它所在的列设置“内容”和“单击”事件。我就在“标题模板”中访问ControlTemplate。但无法弄清楚如何访问ControlTemplate中的超链接按钮。

foreach (DataGridColumn c in grdData.Columns) {
                DataGridTemplateColumn xx = (DataGridTemplateColumn)c;
                Style sty = xx.HeaderStyle;
                Setter stt = sty.Setters[7] as Setter;
                ControlTemplate templ = stt.Value as ControlTemplate;
                ?????
            }

感谢任何帮助/建议???

谢谢你。

娜莉妮。

1 个答案:

答案 0 :(得分:0)

您可以使用ChildrenOfType()方法..

var yourLink = templ.ChildrenOfType<HyperlinkButton>().FirstOrDefault( h => h.Name == "hlHeader" );