2013-10-16 65 views
0

如何從代碼隱藏中訪問我的btnViewTable?特別要能夠打開或關閉可見性,或甚至將其刪除。我已經看過GetTemplateChild以及FindName,但一直無法訪問該按鈕。我可以設法獲得對ControlTemplate的引用,但除此之外無法獲得任何進一步的信息。如何訪問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" 

回答

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

哪裏的DataGrid/DataGridControl是實際DataGridControl

+0

這樣做給我的錯誤「System.Windows.Controls.ControlTemplate」不包含定義‘FindName’和沒有擴展名方法'FindName'接受類型'System.Windows.Controls.ControlTemplate'的第一個參數可以找到(你是否缺少使用指令或程序集引用?)「 – TruthOf42

+0

我目前沒有DataGrid在我的機器上測試它出。這個想法是存在的,你可以嘗試挖掘DataGrid並尋找DataGridRowGroupHeader並且可能循環遍歷它,一旦你得到了一個項目,它應該有Template屬性,你可以在其中訪問它並且執行FindName –

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

相關問題