2010-12-07 91 views
0

當我有第二個數據網格作爲rowdetailstemplate時,我在我的數據網格中遇到了一些奇怪的行爲。主數據網格綁定到我的項目集合,並且詳細信息數據網格綁定到項目包含的子項目集合。現在,所有這些都完美呈現,但是當我想直接單擊SubItemsGrid中的單元格時,它首先選擇包含SubItemsGrid的主網格中該行的第一個單元格。我必須再次單擊才能到達要選擇的單元格。選擇RowDetailsTemplate中的WPF DataGrid的單元格

有沒有人有過這樣的想法?如果是這樣,是否有解決方法?

這是我的加價(部分):

<DataGrid x:Name="ItemGrid" ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False" SelectionUnit="Cell" 
      RowDetailsVisibilityMode="Visible" CanUserResizeRows="False" AreRowDetailsFrozen="False" VerticalAlignment="Top" 
      CanUserAddRows="False" CanUserDeleteRows="False" VerticalScrollBarVisibility="Hidden"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Column1" Binding="{Binding Path=ID}" Width="350"/> 
     <DataGridTextColumn Header="Column2" Binding="{Binding Path=Name}" Width="80"/> 
     <DataGridTextColumn Header="Column3" Binding="{Binding Path=Description}" Width="80"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <DataGrid x:Name="SubItemsGrid" ItemsSource="{Binding Path=SubItems}" AutoGenerateColumns="False" 
         SelectionUnit="Cell" HeadersVisibility="None" Margin="50,0,0,0" VerticalAlignment="Top" CanUserAddRows="False" 
         CanUserResizeRows="False" CanUserDeleteRows="False" BorderThickness="0"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Column1" Binding="{Binding Path=Name}" Width="300" /> 
        <DataGridTextColumn Header="Column2" Binding="{Binding Path=Description}" Width="80"/> 
        <!-- Etc.--> 

---編輯---

好吧,我想出了主意,關於辦理SubItemsGrid鼠標向上事件,然後將焦點設置到SubItemsGrid在代碼中,像這樣的:

private void SubItemsGrid_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    DataGrid selectedGrid = sender as DataGrid; 
    if (selectedGrid != null) 
    { 
     selectedGrid.Focus() 
    } 
} 

調試表明,「焦點」方法被調用右邊格,但我沒有得到任何的視覺效果。然而,我感覺我非常接近解決方案。任何人?

回答

0

我通過捕獲SubItemsGrid的'SelectedCellsChanged'事件來解決這個問題。在處理程序中,我在調用事件的網格上調用了「BeginEdit()」。這確實將焦點直接放在了單擊的單元上,而且也將單元置於編輯模式。這就是爲什麼我之後直接調用CancelEdit()。這將把重點放在單元格上,而不是在編輯模式下。

private void SubItemsGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
{ 
    DataGrid selectedGrid = sender as DataGrid; 
    if (selectedGrid != null) 
    { 
     selectedGrid.BeginEdit(); 
     selectedGrid.CancelEdit(); 
    } 
} 
+0

第一次點擊的吞嚥是我見過自己,雖然沒有與子網格。它也在[這sliverlight.net線程](http://forums.silverlight.net/forums/p/208961/491280.aspx)中評論。我還沒有想出一個通用的解決方案。 – 2011-04-21 15:20:04

相關問題