-2

xaml を使用して設計されたデータグリッドにテキスト ボックスがあります。データグリッドのイベントを使用して、コードファイルで以前にxamlで設計されたテキストボックスにアクセスできますか? 私を助けてください.....................

<Window x:Class="GridTextBox.Test"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowState="Maximized"
    Title="Test" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="30"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width=".25*"/>

        <ColumnDefinition Width=".25*"/>
        <ColumnDefinition Width=".25*"/>
        <ColumnDefinition Width=".25*"/>
    </Grid.ColumnDefinitions>
    <DataGrid Grid.Row="1" Grid.Column="1"  Name="datagrid1" SelectionChanged="datagrid1_SelectionChanged" LoadingRowDetails="DataGrid_LoadingRowDetails"  Height="auto" Width="auto">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Name="txtEmpid" Text="hiiiiii"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

4

2 に答える 2

0

C# のソリューション

namespace ExtensionMethods
{
  public static class Extensions
  {

    public static DataTemplateType GetDataTemplateObjectFromSelectedRow<DataTemplateType>(DataGrid lDataGrid, int lColumnIndex) where DataTemplateType : Visual
    {
      DataGridRow lRow = default(DataGridRow);
      DataGridCell lCell = default(DataGridCell);
      DataGridCellsPresenter lPresenter = default(DataGridCellsPresenter);
      DataTemplateType lFoundObject = null;

      if (lDataGrid.SelectedIndex >= 0)
      {

        lRow = (DataGridRow)lDataGrid.ItemContainerGenerator.ContainerFromIndex(lDataGrid.SelectedIndex);
        lPresenter = GetVisualChild<DataGridCellsPresenter>(lRow);
        lCell = (DataGridCell)lPresenter.ItemContainerGenerator.ContainerFromIndex(lColumnIndex);
        lFoundObject = GetVisualChild<DataTemplateType>(lCell);
      }
      return lFoundObject;
    }

    public static T GetVisualChild<T>(Visual parent) where T : Visual
    {
      T child = null;
      int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
      for (int i = 0; i <= numVisuals - 1; i++)
      {
        Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
        child = v as T;
        if (child == null)
        {
          child = GetVisualChild<T>(v);
        }
        if (child != null)
        {
          break; // TODO: might not be correct. Was : Exit For
        }
      }
      return child;
    }

  }
}

TextBox を取得するには、次の呼び出しを使用します。

private void DataGridButtons_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  TextBox lTextBox = Extensions.GetDataTemplateObjectFromSelectedRow<TextBox>(DataGridButtons, 0);
}
于 2013-04-15T12:19:58.730 に答える