【发布时间】:2018-09-12 15:05:45
【问题描述】:
目前我有一个带有多个 TabItem 的 TabControl。每个 TabItem 内部都有一个 DataGrid。我想一次性格式化这些 DataGrid(单元格颜色、列宽等),但我发现我做不到,因为隐藏选项卡中的所有 DataGrid 都会返回 null 属性。在这种情况下,我尝试解决在格式化 DataGrid 之前以编程方式(或使用鼠标手动)选择选项卡的方法。但现在我遇到了一种“奇怪”的行为:
private void LeftTabs_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Console.WriteLine(LeftTabs.SelectedIndex);
var currentDataGrid = (DataGrid)LeftTabs.SelectedContent;
Console.WriteLine(currentDataGrid.Name);
}
选择的索引返回正确的标签索引,但它的内容没有更新。 假设选择了 Tab 1,然后单击 Tab 2。它返回 Tab 2 索引和 Tab 1 DataGrid 名称。
这种行为使我无法编辑选择选项卡的 DataGrid,因为即使我尝试通过它的对象直接访问它,所有属性都返回 null。
这是 TabControl、item 和 DataGrids XAML 代码:
<TabControl Name="LeftTabs" Margin="0,0,0,0" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SelectionChanged="LeftTabs_SelectionChanged">
<TabItem>
<TabItem.Header>Conditions</TabItem.Header>
<DataGrid x:Name="DataGrid_Conditions" SelectedCellsChanged="DataGrid_Conditions_SelectedCellsChanged" ColumnWidth="80" ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="ConditionsSelected" />
</TabItem>
<TabItem>
<TabItem.Header>Signals</TabItem.Header>
<DataGrid x:Name="DataGrid_Signals" ColumnWidth="80" ItemsSource="{Binding}" HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectionChanged="SignalsSelected" />
</TabItem>
</TabControl>
编辑: 为了更清楚,我将最小化场景。 TabItem1 - 内部有 DataGrid_Conditions; TabItem2 - 里面有 DataGrid_Signals。
这是我手动或以编程方式选择选项卡时尝试运行的另一个代码:
DataGridRow Row = (DataGridRow)DataGrid_Signals.ItemContainerGenerator.ContainerFromIndex(ID);
发生的情况是,如果我单击 tab2,则此代码不适用于 tab2 的网格。相反,它适用于之前的 tab(1) 网格。 LeftTabs.SelectedContent 是唯一未更新的属性。
【问题讨论】:
标签: c# wpf datagrid tabcontrol