Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在TreeView中设置选定TreeItem的样式

在TreeView中设置选定TreeItem的样式
EN

Stack Overflow用户
提问于 2020-06-29 15:10:29
回答 2查看 5.2K关注 0票数 3

我正在尝试覆盖Material-UI TreeView组件中所选TreeItem的样式。根据CSS API文档,有一个selected选择器,但当我使用它时,我看到的是整个子树的样式,而不仅仅是所选的项。什么是正确的选择器,用来只设置所选树项目的样式?

代码沙盒:https://codesandbox.io/s/nostalgic-flower-e85cd?file=/src/App.js

代码语言:javascript
运行
AI代码解释
复制
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import TreeView from "@material-ui/lab/TreeView";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
import ChevronRightIcon from "@material-ui/icons/ChevronRight";
import MuiTreeItem from "@material-ui/lab/TreeItem";
import { withStyles } from "@material-ui/core/styles";

const useStyles = makeStyles({
  root: {
    height: 240,
    flexGrow: 1,
    maxWidth: 400
  }
});

const TreeItem = withStyles({
  selected: {
    color: "red"
  }
})(MuiTreeItem);

export default function FileSystemNavigator() {
  const classes = useStyles();

  return (
    <TreeView
      className={classes.root}
      defaultCollapseIcon={<ExpandMoreIcon />}
      defaultExpandIcon={<ChevronRightIcon />}
    >
      <TreeItem nodeId="1" label="Applications">
        <TreeItem nodeId="2" label="Calendar" />
        <TreeItem nodeId="3" label="Chrome" />
        <TreeItem nodeId="4" label="Webstorm" />
      </TreeItem>
      <TreeItem nodeId="5" label="Documents">
        <TreeItem nodeId="10" label="OSS" />
        <TreeItem nodeId="6" label="Material-UI">
          <TreeItem nodeId="7" label="src">
            <TreeItem nodeId="8" label="index.js" />
            <TreeItem nodeId="9" label="tree-view.js" />
          </TreeItem>
        </TreeItem>
      </TreeItem>
    </TreeView>
  );
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-30 14:18:23

当您有关于如何覆盖默认Material-UI样式的问题时,最好的资源是查看默认样式是如何定义的。

下面是default styles for TreeItem中最相关的部分

代码语言:javascript
运行
AI代码解释
复制
export const styles = (theme) => ({
  /* Styles applied to the root element. */
  root: {
    '&$selected > $content $label': {
      backgroundColor: fade(theme.palette.primary.main, theme.palette.action.selectedOpacity),
    },
    '&$selected > $content $label:hover, &$selected:focus > $content $label': {
      backgroundColor: fade(
        theme.palette.primary.main,
        theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity,
      ),
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent',
      },
    },
  },
  /* Pseudo-class applied to the root element when selected. */
  selected: {},
  /* Styles applied to the tree node content. */
  content: {
    width: '100%',
    display: 'flex',
    alignItems: 'center',
    cursor: 'pointer',
  },
  /* Styles applied to the label element. */
  label: {
    '&:hover': {
      backgroundColor: theme.palette.action.hover,
      // Reset on touch devices, it doesn't add specificity
      '@media (hover: none)': {
        backgroundColor: 'transparent',
      },
    },
  },
});

整体structure of TreeItem (也可以通过查看源代码找到)如下(稍微简化一下):

代码语言:javascript
运行
AI代码解释
复制
<li className={clsx(classes.root, className, {[classes.selected]: selected})}>
   <div className={classes.content}>
      <div className={classes.iconContainer}>
         {icon}
      </div>
      <Typography component="div" className={classes.label}>
         {label}
      </Typography>
   </div>
   {children}
</li>

在上面的结构中,您可以看到selected类位于根元素上,根元素是一个<li>,它包含特定于此TreeItem的内容及其子元素。TreeItem自己的内容在包含content类的<div>中,该div包含图标和标签。

您可以将content目录作为目标,如下所示:

代码语言:javascript
运行
AI代码解释
复制
const TreeItem = withStyles({
  root: {
    "&.Mui-selected > .MuiTreeItem-content": {
      color: "red"
    }
  }
})(MuiTreeItem);

相当于:

代码语言:javascript
运行
AI代码解释
复制
const TreeItem = withStyles({
  root: {
    "&$selected > $content": {
      color: "red"
    }
  },
  selected: {},
  content: {}
})(MuiTreeItem);

如果你不想在样式中包含图标,那么你可以只在内容中定位标签:

代码语言:javascript
运行
AI代码解释
复制
const TreeItem = withStyles({
  root: {
    "&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label": {
      color: "red"
    }
  }
})(MuiTreeItem);

相当于:

代码语言:javascript
运行
AI代码解释
复制
const TreeItem = withStyles({
  root: {
    "&$selected > $content $label": {
      color: "red"
    }
  },
  selected: {},
  content: {},
  label: {}
})(MuiTreeItem);

如果您想要更改背景颜色,则需要注意默认样式中的更多细节(因为默认样式对背景颜色做了很多工作),以便适当地处理悬停和聚焦状态。

票数 8
EN

Stack Overflow用户

发布于 2021-06-08 04:25:39

从“@material-ui/ MuiTreeItem /TreeItem”导入实验室;

从“@material-ui/ withStyles /styles”中导入{withStyles};

const TreeItem = withStyles({

代码语言:javascript
运行
AI代码解释
复制
    root: {
      "&.Mui-selected > .MuiTreeItem-content": {
        background: "#89CFF0"
      },
      "&.MuiTreeItem-root > .MuiTreeItem-content:hover": {
        background: "gray",
      },
      "&.MuiTreeItem-root > .MuiTreeItem-content:hover > .MuiTreeItem-label": {
        background: "#89CFF0",
      },
      
      '@media (hover: none)': {
        backgroundColor: 'transparent',
      },
    }

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

https://stackoverflow.com/questions/62641151

复制
相关文章
在Mapx中设置单个图元的样式
        前几天研究了一下,感觉都快忘了。虽然去啃帮助仍然可以把这些东西啃出来,但有点烦。把记忆的东西零星整理一下: Mapx4不支持具体到图元的样式的指定,只能够指定到图层的样式 而在MapInfo中,是可以为每个图元指定样式的 在Mapx5中,支持对个别图元的样式的指定,所以如果有这个需要,就需要考虑用mapx5 不管是图元样式还是图层样式,都是一个style,这是一个超集。属性很多,但并非每个都能用,有些对线管用,有些对点管用,有些对面管用……这个从字面上都能看出来。 对于Label,也可以指定
用户1075292
2018/01/23
3.4K0
TreeView中节点勾选设置
本文转载:http://www.cnblogs.com/luxiaoxun/p/3288003.html
跟着阿笨一起玩NET
2018/09/18
1.3K0
html中table样式_table样式设置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/05
5.7K0
html中table样式_table样式设置
Qt树形控件QTreeView使用1——节点的添加删除操作[通俗易懂]
QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点)。
全栈程序员站长
2022/09/06
6.8K0
CSS中设置鼠标样式
注释:任何版本的 Internet Explorer (包括 IE8)都不支持属性值 “inherit”。
全栈程序员站长
2022/09/04
2.8K0
:fullscreen在大屏下的样式设置
最近公司在做大屏显示,不过这个页面可以在大屏下显示,也可以在电脑上显示,不过显示的内容是不同的。
玖柒的小窝
2021/11/03
1.5K0
:fullscreen在大屏下的样式设置
javafx框架tornadofx入门实战23_treeview_advanced
treeview构建2棵有关联的文件(夹)树,通过tornadofx提供的populate,仅用3行代码实现一棵树。并可在右侧窗口查看文本文件的内容和图片 import com.dlsc.gemsfx
用户6167008
2020/03/31
2.3K1
javafx框架tornadofx入门实战23_treeview_advanced
iOS从Xib中设置样式
iOS在写视图的有的人喜欢纯代码去写,从之前的绝对定位方式(Frame),到现在的自动布局(Autolayout),但这种方式的好处是便于复制修改和装X,但是缺点是代码不容易看,不便于修改
码客说
2019/10/22
2.4K0
css设置table样式_table的样式怎么设置
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/05
4.8K0
css设置table样式_table的样式怎么设置
javafx框架tornadofx入门26_treeview_增加删除修改
treeview-add-delete-modify.gif 在上一篇的基础上,为treeview添加“增加删除修改”的功能,其中数据类Company,Department,Staff的代码在在上一篇中 import javafx.scene.control.TreeItem import javafx.scene.control.TreeView import javafx.scene.layout.Priority import tornadofx.* class MainView26 : View
用户6167008
2020/04/20
7740
javafx框架tornadofx入门26_treeview_增加删除修改
javafx框架tornadofx入门实战22_treeview
通过treeview构建文件(夹)树,就像windows文件管理器左侧的一样 treeview.gif import javafx.collections.FXCollections import javafx.collections.ObservableList import javafx.scene.control.TreeItem import javafx.scene.layout.Priority import tornadofx.* import java.io.File import ja
用户6167008
2020/03/25
7850
javafx框架tornadofx入门实战22_treeview
material Tree组件的前端模糊搜索
去跟已经平铺到一层的全部节点进行对比,parsentid === id 则添加到父节点的数组中,
biaoblog.cn 个人博客
2022/11/14
1.1K0
material Tree组件的前端模糊搜索
PowerDesigner的样式设置
PD提供了强大的配置功能,可以对生成的数据库对象命名、数据模型的展现进行设置。这里首先讲下样式的设置。
深蓝studyzy
2022/06/16
2.7K0
PowerDesigner的样式设置
用css设置html中table样式
一般情况下table默认是没有边框的,那我们应该如何给它添加边框和颜色呢,下面我们来看一下
OECOM
2020/07/01
2.5K0
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
Qt中模型类的层次结构
全栈程序员站长
2022/07/01
6.5K0
《QTreeView+QAbstractItemModel自定义模型》:系列教程之三[通俗易懂]
javafx框架tornadofx入门25_treeview_显示不同的数据类型
25treeview-company-department-staff.gif 使用treeview显示公司-部门-员工数据 import javafx.scene.control.TreeItem import tornadofx.* class MainView25 : View("tornadofx入门25_treeview_显示不同的数据类型") { val companies = (1..5).map { Company("Company$it") }
用户6167008
2020/04/14
1.6K1
javafx框架tornadofx入门25_treeview_显示不同的数据类型
SecureCRTPortable样式设置
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130562.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/11
1.1K0
SecureCRTPortable样式设置
OL2中设置鼠标的样式
在OL2中,鼠标默认是箭头,地图移动时,鼠标样式是移动样式;很多时候,为了形象起见,我们总是希望鼠标在地图上的时候和移动地图的时候鼠标的样式不是默认的效果,本文讲述如何实现这样的效果。
牛老师讲GIS
2018/10/23
7950
html table样式设计_html设置table中的字体
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/05
5.8K0
点击加载更多

相似问题

在TreeView中设置选定的TreeItem

30

JavaFx:再次在TreeView中添加TreeItem

14

TreeView中的TreeItem选择宽度

13

如何在Javafx中在检查treeItem的条件后在treeView中选择treeItem

10

Access treeItem,而不是treeView

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档