0

コード ビハインドでデータグリッド コントロールのコントロール テンプレート内にあるコントロールにアクセスしようとしています。

myxaml.xaml :

<DataGrid >
.
.
.
<DataGridTemplateColumn x:Name="discountGridTextcolumn" >
    <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBox Name="discountText"/>
            <ComboBox x:Name="discountType"/>
        </StackPanel>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
.
.
.

mybehind.cs :

var comboBox = GetTemplateChild("discountType");

null参照を取得します。

4

2 に答える 2

2

多くの場所を経て、最終的に独自のソリューションを作成しました。それは非常に簡単です。

dataGrid の行 0 列 2 にある「mycb」という名前の CheckBox にアクセスしたいとします。

ContentPresenter cell = dataGrid.Columns[2].GetCellContent(dataGrid.Items[0]) as ContentPresenter;
CheckBox cb = (CheckBox)cell.ContentTemplate.FindName("mycb", cell);
于 2020-11-12T23:29:47.140 に答える
1

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 のオブジェクト (コンボ ボックス、テキスト ボックスなど) にアクセスする方法

于 2012-12-30T07:35:33.483 に答える