2010-08-09 6 views
1

나는 (공식적인 것)이 SelectionUnit="Cell"입니다. 사용자가 셀을 선택하면 해당 행에 대한 행 세부 정보를 표시하려고합니다. 이것은 분명히 기본 동작이 아니며이를 수행하는 방법을 파악할 수 없습니다. 당신은프로그래밍 방식으로 RowDetails 표시

SelectionUnit="FullRow" 

을 FullRow하는 SelectionUnit을 설정하거나 선택 이벤트를 처리하고 이벤트 처리에 대한 가시성을 설정할 수 있습니다

<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

:

여기 내 XAML입니다.

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

저는 지난 2 개월 동안 DataGrid를 많이 사용했습니다. 나는 당신이 방금 말한 것을 정확히 발견했습니다 : 기초를 지나친 정보는 거의 없습니다. WPF Toolkit 소스로 들어가는 데 매우 유용합니다. – jrwren

관련 문제