WPF DataGrid选中项如何设置不失去选中状态?

saybookcat 2016-06-03 09:46:06
DataGrid选中的项,在点击DataGrid之外的地方时,丢失焦点变成灰色,如何能让DataGrid的选中项一直保持选中的高亮状态?

<DataGrid
ItemsSource="{Binding ItemsSource}"
Style="{StaticResource DataGridStyle}"
SelectedItem="{Binding SelectedItem}"
ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
RowStyle="{StaticResource CapResultStyle}"
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction
Command="{Binding DataContext.QueryCmd,
RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Width="60" Binding="{Binding Disp}"
ElementStyle="{StaticResource DataGridContentCenterSytle}" />
<DataGridTextColumn Header="时间" Width="160" Binding="{Binding DateTime}"
ElementStyle="{StaticResource DataGridContentCenterSytle}" />
<DataGridTextColumn Header="处理结果" Width="80" Binding="{Binding ResultStr}"
ElementStyle="{StaticResource DataGridContentCenterSytle}" />

</DataGrid.Columns>
</DataGrid>
...全文
1080 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 8 楼 saybookcat 的回复:
[quote=引用 6 楼 duanzi_peng 的回复:] [quote=引用 5 楼 saybookcat 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] 加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
这个思路是可行,不过由于涉及到的页面比较多,所以想最好是从Style 或者 Trigger方面入手。 不知道能否在DataTrigger中对比绑定的项,不行的话 ,只能修改ControlTemplate了[/quote] 对比绑定的项 最终还是要获取是否选中数据的。[/quote] 找到最终的解决方案了。 设置RowStyle失败是由于,实际的效果是由CellStyle来控制的 ,于是添加下面的Style就可以了

    <Style TargetType="DataGridCell">
        <Style.Triggers >
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="#3399FF"></Setter>
                <Setter Property="Foreground" Value="#FFFFFF"></Setter>
                <Setter Property="BorderBrush" Value="#3399FF"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
[/quote] 恭喜
saybookcat 2016-06-12
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
[quote=引用 5 楼 saybookcat 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] 加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
这个思路是可行,不过由于涉及到的页面比较多,所以想最好是从Style 或者 Trigger方面入手。 不知道能否在DataTrigger中对比绑定的项,不行的话 ,只能修改ControlTemplate了[/quote] 对比绑定的项 最终还是要获取是否选中数据的。[/quote] 找到最终的解决方案了。 设置RowStyle失败是由于,实际的效果是由CellStyle来控制的 ,于是添加下面的Style就可以了

    <Style TargetType="DataGridCell">
        <Style.Triggers >
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="#3399FF"></Setter>
                <Setter Property="Foreground" Value="#FFFFFF"></Setter>
                <Setter Property="BorderBrush" Value="#3399FF"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
龍过鸡年 2016-06-12
  • 打赏
  • 举报
回复

<DataGrid x:Name="dg">
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid>
                            <Rectangle Fill="{TemplateBinding Background}" />
                            <ContentPresenter />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter Property="Background" Value="Blue" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Path=.}" />
    </DataGrid.Columns>
</DataGrid>


// 随便找个按钮执行代码
for (int i = 0; i < 100; i++)
{
    dg.Items.Add(string.Format("{0}", i));
}
saybookcat 2016-06-07
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
[quote=引用 5 楼 saybookcat 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] 加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
这个思路是可行,不过由于涉及到的页面比较多,所以想最好是从Style 或者 Trigger方面入手。 不知道能否在DataTrigger中对比绑定的项,不行的话 ,只能修改ControlTemplate了[/quote] 对比绑定的项 最终还是要获取是否选中数据的。[/quote] 在Model的抽象类中加一个字段来记录选中状态,然后通过这个字段来设置颜色。 虽然不是很好的方法,但胜在改动小。
  • 打赏
  • 举报
回复
引用 5 楼 saybookcat 的回复:
[quote=引用 4 楼 duanzi_peng 的回复:] 加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
这个思路是可行,不过由于涉及到的页面比较多,所以想最好是从Style 或者 Trigger方面入手。 不知道能否在DataTrigger中对比绑定的项,不行的话 ,只能修改ControlTemplate了[/quote] 对比绑定的项 最终还是要获取是否选中数据的。
saybookcat 2016-06-06
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
这个思路是可行,不过由于涉及到的页面比较多,所以想最好是从Style 或者 Trigger方面入手。 不知道能否在DataTrigger中对比绑定的项,不行的话 ,只能修改ControlTemplate了
  • 打赏
  • 举报
回复
加一列 checkbox 并隐藏,根据checkbox的值 使用触发器 来改变颜色。
saybookcat 2016-06-03
  • 打赏
  • 举报
回复
通过DataTrigger设置行等于SelectedItem时设置背景色和字体颜色,不知道可不可实现?
saybookcat 2016-06-03
  • 打赏
  • 举报
回复
引用 2 楼 falcomavin 的回复:
自定义模板,不过绝大部分都可以用原生的,只需要修改isfocus==false的颜色就可以了,改成和selected时一样的
这个思路不行啊 。这样的话 ,没选中的项都是和选中一样的。。
黑娃 2016-06-03
  • 打赏
  • 举报
回复
自定义模板,不过绝大部分都可以用原生的,只需要修改isfocus==false的颜色就可以了,改成和selected时一样的

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧