2010-08-09 196 views
1

我有一個(官方的)SelectionUnit="Cell"。當用戶選擇一個單元格時,我想顯示相應行的行詳細信息。這顯然不是默認行爲,我似乎無法弄清楚如何實現這一點。以編程方式顯示RowDetails

這裏是我的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 2010-08-12 01:49:07

+0

過去兩個月來我一直在使用DataGrid。我剛剛發現了你剛纔所說的內容:基本信息很少。它非常有用,只是深入WPF工具包源。 – jrwren 2010-08-12 04:11:28