繁体   English   中英

如何获取DataGridTextColumn发送者的datagrid父级

[英]How to get the DataGridTextColumn sender's datagrid parent

嗨,我有一个datagrid和DataGridTextColumn在下面的代码中显示:

<DataGridTextColumn Header="" Width="1*" Binding="{Binding FORECAST_MIN, UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}" >
 <DataGridTextColumn.EditingElementStyle>
    <Style TargetType="{x:Type TextBox}">
        <EventSetter Event="LostFocus" Handler="fMin_LostFocus" />                  
    </Style>
</DataGridTextColumn.EditingElementStyle>

现在在LostFocus事件中,我想从发送者那里获取父datagrid。

private void fMin_LostFocus(object sender, RoutedEventArgs e)
{            
//Get the datagrid parent
}

有一个简单的方法吗? 谢谢。 像添加标签一样?

Jeff和OptimusPrime的答案都起作用。 它只允许我选择一个答案。

您必须遍历可视化树,直到找到合适的父级。

DependencyObject depObj = sender as DependencyObject;
while (depObj != null && !(depObj is DataGrid)) {
    depObj = VisualTreeHelper.GetParent (depObj);
}
DataGrid dg = (DataGrid) depObj;

杰夫的答案应该起作用。 由于您提到了“标签”。 这可能是另一种方法吗? 可能不是最优雅的方式。

<DataGridTemplateColumn Header="">
<DataGridTemplateColumn.CellTemplate>
        <DataTemplate>    
            <TextBox Text="{Binding FORECAST_MIN, UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}" Tag="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}}" LostFocus="fMin_LostFocus"/>    
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

并在您的代码中:

private void fMin_LostFocus(object sender, RoutedEventArgs e)
    {
        var tb = (TextBox)sender;
        DataGrid parentDataGrid = (DataGrid)tb.Tag;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM