首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGridCell样式设置CurrentItem

WPF DataGridCell样式设置CurrentItem
EN

Stack Overflow用户
提问于 2015-09-26 18:16:49
回答 1查看 382关注 0票数 1

有没有办法在当前行/项上触发样式?如果只选择了一行,则此

代码语言:javascript
复制
<Trigger Property="DataGridCell.IsSelected" Value="True">

有效,但如果选择了多个行怎么办。我只想设置属于当前项目的单元格/箭头的样式。

EN

回答 1

Stack Overflow用户

发布于 2015-09-26 20:08:37

对于“属于当前项的单元格”,我猜您指的是当前聚焦的行?有两种不同类型的“选择”。一个是它本身的选择(由IsSelected属性指示),它指示对DataGrid的选择。这意味着,选择的每一行(如果不允许多行,则只有一行)。第二个是聚焦的单元格或行(由IsFocused属性指示),它不用于网格的数据行为,而是用于图形选择,或者您所称的“当前”行或单元格。

您可以使用以下几个属性:

代码语言:javascript
复制
<Style x:Key="cellstyle" TargetType="DataGridCell">
    <Setter Property="Background" Value="Transparent"/>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="Blue"/>
        </Trigger>
        <Trigger Property="IsFocused" Value="True">
            <Setter Property="Background" Value="Green"/>
        </Trigger>
    </Style.Triggers>
</Style>

第一个命令会更改每个选定的单元格(如果您通过按住shift键来选择它们)。第二个只更改“当前”单元格。

如果需要对"current“单元格的整行执行此操作,则可以使用该行的IsKeyboardFocusWithin属性执行此操作:

代码语言:javascript
复制
<Style x:Key="rowstyle" TargetType="DataGridRow">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="Yellow" />
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Setter Property="Background" Value="Purple" />
        </Trigger>
    </Style.Triggers>
</Style>

上面的例子演示了如何向整行添加行为。请注意,单元格背景始终位于行背景的前面。如果您需要同时拥有单元格和行背景(因此您不能使用透明的单元格背景),则需要使用MultiDataBinding,您可以在其中排除相应的行状态。假设一个条件需要行的IsKeyboardFocusWithin为false:

代码语言:javascript
复制
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}}" Value="False"/>
        <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <Setter Property="Background" Value="Blue"/>
</MultiDataTrigger>

不要忘记,当您有多个触发器为真时,将采用列表中的最后一个触发器。这意味着,如果您更改了第一个示例中触发器的顺序,您将看不到从选定单元格到聚焦单元格的任何区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32796073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档