Я испытываю какое-то странное поведение в своем datagrid, когда у меня есть второй datagrid как rowdetailstemplate. Основной файл данных привязан к моей коллекции элементов, а детали datagrid привязаны к набору подэлементов, содержащихся в элементе. Теперь все это получается отлично, но когда я хочу напрямую щелкнуть по ячейке в SubItemsGrid, он сначала выбирает первую ячейку строки в основной сетке, в которой содержится SubItemsGrid. Я должен щелкнуть второй раз, чтобы добраться до ячейки, которую я хочу выбрать.Выбор ячейки WPF DataGrid, которая находится внутри RowDetailsTemplate
Неужели кто-нибудь так себя зарекомендовал? И если так, есть ли обходной путь?
Это моя наценка (частично):
<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.-->
--- EDIT ---
Хорошо, я пришел с идеей, чтобы справиться с мышью вверх событие на SubItemsGrid , а затем установите фокус на SubItemsGrid в коде, например:
private void SubItemsGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
DataGrid selectedGrid = sender as DataGrid;
if (selectedGrid != null)
{
selectedGrid.Focus()
}
}
отладки показывают, что метод «фокус» вызывается на правой сетке, но я не получаю никаких визуальных результатов. У меня такое чувство, что я очень близок к решению. Кто угодно?
Проглатывание первого щелчка - это то, что я видел сам, хотя и не с детской сеткой. Он также прокомментирован в [этой ветке sliverlight.net] (http://forums.silverlight.net/forums/p/208961/491280.aspx). У меня еще не сложилось общее решение. – 2011-04-21 15:20:04