gpt4 book ai didi

c# - 如何使默认的 TreeView (System.Windows.Controls) 具有与 RadTreeView (telerik) 相同的样式?

转载 作者:行者123 更新时间:2023-11-30 17:26:25 26 4
gpt4 key购买 nike

我尝试简单地将 <TreeView> 更改为 <RadTreeView> 但它弄乱了一些方法背后的代码,所以我想我可以只应用样式,但没有我试过了。

下面的代码工作正常,我尝试将静态资源更改为 RadTreeViewItemStyle 它编译没有问题,但是我在运行时收到错误消息“只能基于目标类型为基本类型的样式'TreeViewItem' "

<TreeView.Resources>
<Style BasedOn="{StaticResource MetroTreeViewItem}" TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
</Style>
</TreeView.Resources>;

最佳答案

第一个解决方案:您可以让您的 TreeView 扩展 RadTreeView。我认为 RadTreeView 有一些特殊的依赖属性,而且似乎也使用它自己的自定义项容器。这就是 Telerik 样式在 TreeView 上无法正常工作的原因,尽管它首先进行了编译。

第二种解决方案:可以是提取RadTreeView样式并重构它,以便它可以应用于WPF TreeView

在 Visual Studio 中,您有两个选择。第一个选择是遵循这 5 个简单的步骤:

  1. 转到 XAML 设计器并打开设计 Pane (Shift+F7)
  2. 选择您希望从中提取样式的元素 (RadTreeView) 并右键单击它
  3. 在上下文菜单中选择编辑模板 -> 编辑副本
  4. 在对话框中为新提取的样式输入名称,然后单击确定
  5. 您现在回到了 XAML 设计器中。寻找新的风格。它被添加到您选择元素标签以提取样式的同一文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典中

要提取项目模板,请重复步骤 1 和 2。然后从上下文菜单中选择编辑其他模板 -> 编辑生成的项目 (ItemTemplate)。继续第 4 步和第 5 步。

第二种选择是按照这 7 个简单的步骤来提取元素的样式:

  1. 转到 XAML 设计器并选择要从中提取样式的元素的标签 (RadTreeView)
  2. 然后转到Properties Pane 并向下滚动到Miscellaneous 部分
  3. 展开杂项部分并向下滚动到样式字段
  4. 在这个区域的右边是一个小方 block 。左键单击此方 block 以打开上下文菜单
  5. 在上下文菜单中选择转换为新资源...。这将打开一个对话框。
  6. 在对话框中为新样式命名并单击确定
  7. 您现在回到了 XAML 设计器中。寻找新的风格。它被添加到您选择元素标签以提取样式的同一文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典中

要提取模板,请重复步骤 1 和 2。然后转到模板 字段。继续执行步骤 4 到 7。

第三个​​解决方案:重构您的代码隐藏,以使其与 RadTreeView 一起工作。

第四种解决方案:如果只是项目容器导致样式不兼容,请调整您的 TreeView 以使用 Telerik 项目容器版本(而不是 TreeViewItem)。您可以通过扩展 TreeView 然后覆盖默认项目容器来实现:

public class MyExtendedTreeView : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is RadTreeViewItem);
}

protected override DependencyObject GetContainerForItemOverride()
{
return new RadTreeViewItem();
}
}

我认为这是你的选择。

关于c# - 如何使默认的 TreeView (System.Windows.Controls) 具有与 RadTreeView (telerik) 相同的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com