要重现此问题,请添加用户控件,粘贴下面的xaml,然后将实例添加到窗口.最后将窗口的datacontext设置为ADummyDataContext的实例(也在下面)
当您第一次运行应用程序时,您应该获得一个包含三个类别的网格,每个类别包含一个cat.如果单击底部两个类别中的任何一个并单击猫名称,则会出现一个蓝色行,仅显示猫的名称.
但是,如果单击第一行并单击cat的行,则不会显示蓝色行. 注意:这仅在您第一次运行应用程序时发生.一旦你点击任何其他猫,第一类猫将按预期工作.
<UserControl x:Class="WpfUserControls.SimpleGridControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="#FFE46400">
<Grid Margin="2,2,2,2">
<Grid.RowDefinitions>
<RowDefinition Height="26" MaxHeight="26" MinHeight="26" />
<RowDefinition />
<RowDefinition Height="26" MaxHeight="26" MinHeight="26" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ToolBar Grid.Row="0">
<Button Content="Button" Name="button1" VerticalAlignment="Center" Width="75" />
<Button Content="Button" Name="button2" VerticalAlignment="Center" Width="75" />
</ToolBar>
<DataGrid CanUserAddRows="False" ItemsSource="{Binding Path=KittensView}" AutoGenerateColumns="True" Grid.Row="1" HorizontalAlignment="Stretch" Name="dataGrid1" VerticalAlignment="Stretch">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" Margin="0,0,5,0"/>
<TextBlock Text="{Binding Path=ItemCount}"/>
<TextBlock Text=" Items"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Background="LightBlue" Orientation="Horizontal" >
<!-- <Image Height="32" Width="32" Source="/WpfUserControls;component/cat.png"></Image> -->
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Height ="20" Text="{Binding Path=Name}"/>
</StackPanel>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
<StatusBar Grid.Row="2"></StatusBar>
</Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
这是数据上下文类和Kitten类.
public class ADummyDataContext
{
public List<Kitten> Kittens { get; set; }
public ADummyDataContext()
{
Kittens = new List<Kitten>
{
new Kitten {Color = "Orange", Name = "Alfie", Weight=6, Sex="Male"},
new Kitten {Color = "Black and White", Name = "Smudge", Weight = 4, Sex="Female"},
new Kitten {Color = "Grey", Name = "Charlotte", Weight = 5, Sex="Female"}
};
KittensView = new ListCollectionView(Kittens);
KittensView.GroupDescriptions.Add(new PropertyGroupDescription("Weight"));
}
public ListCollectionView KittensView { get; set; }
}
public class Kitten
{
public string Name { get; set; }
public string Color { get; set; }
public int Weight { get; set; }
public string Sex { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我特别想知道如何解决这里的问题.
谢谢
问题是,第一个项目在DataGrid
第一次加载时已被选中.但是,它并未真正选中,它似乎未选中,并且未展开组.但是当你第一次点击第一个项目时,DataGrid
由于SelectedIndex
已经为0 ,因此无法区分.这真的很烦人,我之前几次注意到了类似的行为.
作为一种解决方法,您可以在Loaded
发生事件时取消选择第一项DataGrid
<DataGrid Loaded="dataGrid1_Loaded"
...>
Run Code Online (Sandbox Code Playgroud)
事件处理程序:请注意,SelectedIndex为0
private void dataGrid1_Loaded(object sender, RoutedEventArgs e)
{
DataGrid dataGrid = sender as DataGrid;
dataGrid.SelectedItem = null;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
961 次 |
最近记录: |