簡體   English   中英

如何訪問數據網格中的模板控件?

[英]How can I Access to template controls in datagrid?

我正在嘗試訪問一個控件,該控件位於后面的代碼中的數據網格控件的控件模板內。

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,則必須將它們放在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;
}

另一個解決方案How to access objects (comboBox, TextBox...) in DataTemplate

經歷了很多地方,終於做出了自己的解決方案,很簡單:

假設我們想要訪問 dataGrid 的第 0 行第 2 列中名為“mycb”的復選框:

ContentPresenter cell = dataGrid.Columns[2].GetCellContent(dataGrid.Items[0]) as ContentPresenter;
CheckBox cb = (CheckBox)cell.ContentTemplate.FindName("mycb", cell);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM