2010-08-09 2 views
1

У меня есть DataGrid (официальный) с SelectionUnit="Cell". Когда пользователь выбирает ячейку, я хотел бы показать строковые данные для соответствующей строки. По-видимому, это не поведение по умолчанию, и я не могу понять, как это сделать.Отображается программно-рядная строка

Вот мой XAML:

<UserControl x:Class="View.Test" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../AppResources.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </UserControl.Resources> 
    <Grid> 
     <DataGrid AutoGenerateColumns="False" 
       ItemsSource="{Binding Path=Fields}" 
       BorderBrush="Transparent" 
       HeadersVisibility="Column" 
       SelectionMode="Single" 
       SelectionUnit="Cell" 
       CanUserAddRows="False" 
       CanUserDeleteRows="False" 
       CanUserSortColumns="False" 
       IsTextSearchEnabled="True" 
       x:Name="EntryGrid" 
       > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="Auto" IsReadOnly="True"/> 
       <DataGridTemplateColumn Header="Value" Width="Auto" x:Name="valueColumn" MinWidth="60" MaxWidth="90"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=DisplayValue}" TextTrimming="CharacterEllipsis" ToolTip="{Binding Path=Text, RelativeSource={RelativeSource Self}}"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <DockPanel> 
           <ComboBox TabIndex="1" HorizontalAlignment="Stretch" VerticalAlignment="Center" SelectedValue="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Value" ItemsSource="{Binding Path=FieldOptions}" Visibility="{Binding Path=FieldOptions, Converter={StaticResource EmptyCollectionIsInvisibleConverter}}" /> 
           <TextBox TabIndex="2" Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Center" HorizontalAlignment="Stretch" Visibility="{Binding Path=FieldOptions, Converter={StaticResource NonEmptyCollectionIsInvisibleConverter}}"/> 
          </DockPanel> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 
       <DataGridTemplateColumn Header="Description" IsReadOnly="True" Width="*" > 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Description}" TextWrapping="Wrap" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Path=Help}" /> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
     </DataGrid> 
    </Grid> 
</UserControl> 

ответ

4

Вы можете установить SelectionUnit в FullRow

SelectionUnit="FullRow" 

или вы можете обрабатывать событие выбора и установить видимость на обработку событий.

private void EntryGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
    { 
     foreach (var cell in e.AddedCells) 
     ((DataGridRow)EntryGrid.ItemContainerGenerator.ContainerFromItem(cell.Item)).DetailsVisibility = System.Windows.Visibility.Visible; 
     foreach (var cell in e.RemovedCells) 
      ((DataGridRow)EntryGrid.ItemContainerGenerator.ContainerFromItem(cell.Item)).DetailsVisibility = System.Windows.Visibility.Collapsed; 
    } 

Вставьте здесь пренебрежительные замечания о WPF DataGrid.

+0

Вау, как вы это поняли? Похоже, там очень мало информации о DataGrid. Я был бы признателен за ссылки на любые статьи или образцы, которые вы нашли полезными. Это такой простой кусок кода, и я бы никогда не нашел его. – notJim

+0

Я много работал с DataGrid последние 2 месяца. Я нашел именно то, что вы только что сказали: очень мало информации прошло мимо основ. Его ОЧЕНЬ полезно просто погрузиться в источник инструмента WPF Toolkit. – jrwren

Смежные вопросы