【问题标题】:How to get the DataGridTextColumn sender's datagrid parent如何获取 DataGridTextColumn 发件人的数据网格父级
【发布时间】:2019-01-04 23:02:40
【问题描述】:

您好,我有一个数据网格和 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 事件中,我想从发送方获取父数据网格。代码

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

有没有简单的方法可以做到这一点?谢谢你。添加标签之类的东西?

#

Jeff 和 OptimusPrime 的答案都有效。它只允许我选择一个答案。

【问题讨论】:

    标签: wpf datagrid parent


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      杰夫的回答应该有效。 既然你提到了“标签”。这可能是另一种方式吗?不过可能不是最优雅的方式。

      <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;
          }
      

      【讨论】:

        猜你喜欢
        • 2018-09-24
        • 1970-01-01
        • 2020-06-20
        • 2017-01-04
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        相关资源
        最近更新 更多