2011-05-23 60 views
7

假設我在DataGridTemplateColumn中有一個任意控件,我希望知道如何獲取控件,因爲我已經檢索到包含該控件的DataGridCell。從DataGridCell獲取控件

含有數據網格我XAML文件如下:

<DataGrid Name="dgMovement"> 
...  
    <DataGridTemplateColumn Header="Target %"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
      <vi:PercentageEditor Value="{Binding TargetPercentage, Mode=TwoWay, 
         UpdateSourceTrigger=PropertyChanged}" Width="100px" 
         cal:Message.Attach="[Event PreviewLostKeyboardFocus] = [Action ChangeTargetPercentage];[Event PreviewGotKeyboardFocus] = [Action OnFocus]" 
         Name="aa" /> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn>... 

我檢索到的DataGridCell使用擴展方法如下:

DataGridCell cell = view.dgMovement2.GetCell(index, 6); 

的擴展方法,包含在一個靜態類是發現here

問題是,如何檢索「PercentageEditor」,一旦我獲得了DataGridCell?有誰能夠幫助我?任何幫助將不勝感激。謝謝!

回答

11

您可以使用控件的名稱在模板中找到它,例如

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <uc:Bogus x:Name="root" ItemsSource="{Binding Machines}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
var cell = dataGrid.GetCell(5, 0); 
var cp = (ContentPresenter)cell.Content; 
var bogus = (Bogus)cp.ContentTemplate.FindName("root", cp); 

不過請注意,這通常應該必要,因爲修改模板控制在大多數情況下可以使用數據綁定單獨,附加屬性和事件來完成。一般來說,我會通過代碼限制模板訪問到自定義控件(通常有designated parts)。

+0

謝謝!這解決了我的問題! – bluebloodedboy 2011-06-02 06:20:11

+0

很高興幫助:)(你可以通過點擊左邊的複選標記來接受這個答案) – 2011-06-02 11:52:08

+0

幾年後,我仍然發現thia很有用。謝謝。 – 2015-04-20 10:13:43