c# - 如何使默认 TreeView (System.Windows.Controls) 具有与 RadTreeView (telerik) 相同的样式?
问题描述
我尝试简单地将 < 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
样式并对其进行重构,以便它可以应用于 WPFTreeView
。
在 Visual Studio 中,您有两个选择。第一个选择是遵循这 5 个简单的步骤:
- 转到 XAML 设计器并打开设计窗格(Shift+F7)
- 选择要从 (
RadTreeView
) 中提取样式的元素并右键单击它 - 在上下文菜单中选择Edit Template -> Edit a Copy
- 在对话框中输入新提取样式的名称,然后单击确定
- 您现在回到了 XAML 设计器中。寻找新风格。它被添加到您选择元素标签以提取样式的同一文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典中
要提取项目模板,请重复步骤 1 和 2。然后从上下文菜单中选择Edit Additional Template -> Edit Generated Items (ItemTemplate) 。继续执行步骤 4 和 5。
第二种选择是按照这 7 个简单的步骤来提取元素的样式:
- 转到 XAML 设计器并选择要从中提取样式的元素的标记 (
RadTreeView
) - 然后转到“属性”窗格并向下滚动到“杂项”部分
- 展开Miscellaneous部分并向下滚动到Style字段
- 在这个领域的右边是一个小方块。左键单击此方块以打开上下文菜单
- 在上下文菜单中选择转换为新资源...。这将打开一个对话框。
- 在对话框中为新样式命名,然后单击确定
- 您现在回到了 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();
}
}
我认为这是你的选择。
推荐阅读
- python - 使用for循环在python中添加两个数组
- python - Python pandas沿两个条件变量添加序列
- java - DataProvider 不允许返回 String 2D 数组
- pyspark - 无法将 pyspark 中的数据框复制到 Databricks 中的 csv 文件
- dataweave - 在 Mule 4 中读取 YAML 文件
- android - cordova-plugin-shake 适用于 Android,但不适用于 iOS
- forms - 提交表单后重置 Google 表格
- c++ - OpenCL 内核无法在发布模式下工作/打印?
- firebird - 如何通过flarerobin创建PSQL存储函数
- java - 如何扫描不同的二维码并在android中列出它们