null を返す場合は、OnApplyTemplate()
メソッドに配置する必要があります。たとえば、
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var comboBox = GetTemplateChild("discountType") as ComboBox;
}
また、コード ビハインドからコントロール テンプレート パーツにアクセスする方法も試してください。
更新しました
方法から:DataTemplateで生成された要素を見つける:
DataGridRow row = (DataGridRow)(yourgrid.ItemContainerGenerator.ContainerFromItem(yourgrid.SelectedItem));
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);
DataTemplate template = presenter.ContentTemplate;
ComboBox Com= (ComboBox)template.FindName("discountType", presenter);
FindVisualChild 関数:
private childItem FindVisualChild<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
return (childItem)child;
else
{
childItem childOfChild = FindVisualChild<childItem>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}
別の解決策DataTemplate のオブジェクト (コンボ ボックス、テキスト ボックスなど) にアクセスする方法