适用于 WPF 的 Xceed DataGrid:复选框需要单击 3 次才能更改
Xceed DataGrid for WPF: checkboxes need 3 clicks to change
我制作了一个非常基本的 DataGrid 来对其进行测试,但我立即 运行 解决了这个问题,在前 2 次点击中,单击复选框不会执行任何操作。看起来需要点击一下才能关闭它打开的任何内容,再点击一次以聚焦,然后它才能通过第三次点击实际检查它。
顺便说一句,这是我正在使用的 DataGrid (https://xceed.com/xceed-datagrid-for-wpf/)。
GIF showing issue
XAML:
<UserControl.Resources>
<DataTemplate x:Key="ItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Property1}"/>
<CheckBox IsChecked="{Binding Property2}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid>
<xcdg:DataGridControl ItemTemplate="{DynamicResource ItemTemplate}"
ItemsSource="{Binding Collection, Source={StaticResource SampleDataSource1}}"
UpdateSourceTrigger="CellContentChanged"
Margin="10">
</xcdg:DataGridControl>
</Grid>
"SampleDataSource1" 只是自动生成的,但无论如何它都在这里:
<SampleDataSource1:SampleDataSource1 xmlns:SampleDataSource1="clr-namespace:Expression.Blend.SampleData.SampleDataSource1">
<SampleDataSource1:SampleDataSource1.Collection>
<SampleDataSource1:Item Property1="Cras aenean" Property2="True"/>
<SampleDataSource1:Item Property1="Class mauris aliquam" Property2="False"/>
<SampleDataSource1:Item Property1="Maecenas integer duis curae" Property2="True"/>
<SampleDataSource1:Item Property1="Praesent nullam nunc" Property2="False"/>
<SampleDataSource1:Item Property1="Nam quisque" Property2="True"/>
<SampleDataSource1:Item Property1="Sed accumsan" Property2="False"/>
<SampleDataSource1:Item Property1="Aptent vivamus aliquam aliquet" Property2="True"/>
<SampleDataSource1:Item Property1="Blandit donec dis" Property2="False"/>
<SampleDataSource1:Item Property1="Amet commodo" Property2="True"/>
<SampleDataSource1:Item Property1="Ante conubia" Property2="False"/>
</SampleDataSource1:SampleDataSource1.Collection>
在你的数据网格上添加这个(在 xaml):
DataGridCell.GotFocus="DataGrid_GotFocus"
并在后面的代码中添加:
private void DataGrid_GotFocus(object sender, RoutedEventArgs e)
{
// Lookup for the source to be DataGridCell
if (e.OriginalSource.GetType() == typeof(DataGridCell))
{
// Starts the Edit on the row;
DataGrid grd = (DataGrid)sender;
grd.BeginEdit(e);
}
}
所以,如果幸运的话,您会在设计中看到一个巨大的飞溅 window,其中有一个按钮,上面写着:"Show configuration window"(使用后似乎永远消失了)。我生成了一些 XAML 来解决这个问题:
<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvsSongs}}"
NavigationBehavior="RowOrCell"
CellEditorDisplayConditions="RowIsBeingEdited, MouseOverCell,
MouseOverRow, RowIsCurrent, CellIsCurrent"
EditTriggers="BeginEditCommand, ClickOnCurrentCell, SingleClick,
CellIsCurrent, ActivationGesture, RowIsCurrent"/>
如果您知道如何使 window 再次出现,请随时发表评论。
配置Window信息:Xceed documentation
还有其他一些人有配置 Window 问题。可能对你有用:xceed forums
我制作了一个非常基本的 DataGrid 来对其进行测试,但我立即 运行 解决了这个问题,在前 2 次点击中,单击复选框不会执行任何操作。看起来需要点击一下才能关闭它打开的任何内容,再点击一次以聚焦,然后它才能通过第三次点击实际检查它。
顺便说一句,这是我正在使用的 DataGrid (https://xceed.com/xceed-datagrid-for-wpf/)。
GIF showing issue
XAML:
<UserControl.Resources>
<DataTemplate x:Key="ItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Property1}"/>
<CheckBox IsChecked="{Binding Property2}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid>
<xcdg:DataGridControl ItemTemplate="{DynamicResource ItemTemplate}"
ItemsSource="{Binding Collection, Source={StaticResource SampleDataSource1}}"
UpdateSourceTrigger="CellContentChanged"
Margin="10">
</xcdg:DataGridControl>
</Grid>
"SampleDataSource1" 只是自动生成的,但无论如何它都在这里:
<SampleDataSource1:SampleDataSource1 xmlns:SampleDataSource1="clr-namespace:Expression.Blend.SampleData.SampleDataSource1">
<SampleDataSource1:SampleDataSource1.Collection>
<SampleDataSource1:Item Property1="Cras aenean" Property2="True"/>
<SampleDataSource1:Item Property1="Class mauris aliquam" Property2="False"/>
<SampleDataSource1:Item Property1="Maecenas integer duis curae" Property2="True"/>
<SampleDataSource1:Item Property1="Praesent nullam nunc" Property2="False"/>
<SampleDataSource1:Item Property1="Nam quisque" Property2="True"/>
<SampleDataSource1:Item Property1="Sed accumsan" Property2="False"/>
<SampleDataSource1:Item Property1="Aptent vivamus aliquam aliquet" Property2="True"/>
<SampleDataSource1:Item Property1="Blandit donec dis" Property2="False"/>
<SampleDataSource1:Item Property1="Amet commodo" Property2="True"/>
<SampleDataSource1:Item Property1="Ante conubia" Property2="False"/>
</SampleDataSource1:SampleDataSource1.Collection>
在你的数据网格上添加这个(在 xaml):
DataGridCell.GotFocus="DataGrid_GotFocus"
并在后面的代码中添加:
private void DataGrid_GotFocus(object sender, RoutedEventArgs e)
{
// Lookup for the source to be DataGridCell
if (e.OriginalSource.GetType() == typeof(DataGridCell))
{
// Starts the Edit on the row;
DataGrid grd = (DataGrid)sender;
grd.BeginEdit(e);
}
}
所以,如果幸运的话,您会在设计中看到一个巨大的飞溅 window,其中有一个按钮,上面写着:"Show configuration window"(使用后似乎永远消失了)。我生成了一些 XAML 来解决这个问题:
<xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvsSongs}}"
NavigationBehavior="RowOrCell"
CellEditorDisplayConditions="RowIsBeingEdited, MouseOverCell,
MouseOverRow, RowIsCurrent, CellIsCurrent"
EditTriggers="BeginEditCommand, ClickOnCurrentCell, SingleClick,
CellIsCurrent, ActivationGesture, RowIsCurrent"/>
如果您知道如何使 window 再次出现,请随时发表评论。
配置Window信息:Xceed documentation
还有其他一些人有配置 Window 问题。可能对你有用:xceed forums