C# 如何使默认TreeView(System.Windows.Controls)具有与RadTreeView(telerik)相同的样式?
我试着简单地将更改为,但它会弄乱一些方法背后的代码,所以我想我可以只应用样式,但我尝试的都不起作用 下面的代码运行良好,我尝试将静态资源更改为它编译的RadTreeItemStyle,没有问题,但在运行时出现错误,错误是“只能基于目标类型为基类型“TreeItem”的样式”C# 如何使默认TreeView(System.Windows.Controls)具有与RadTreeView(telerik)相同的样式?,c#,wpf,xaml,telerik,C#,Wpf,Xaml,Telerik,我试着简单地将更改为,但它会弄乱一些方法背后的代码,所以我想我可以只应用样式,但我尝试的都不起作用 下面的代码运行良好,我尝试将静态资源更改为它编译的RadTreeItemStyle,没有问题,但在运行时出现错误,错误是“只能基于目标类型为基类型“TreeItem”的样式” ; 第一个解决方案:您可以让您的树视图扩展RadTreeView。我认为,RadTreeView有一些特殊的依赖属性,并且似乎使用了它自己的定制项目容器。这就是为什么Telerik样式在TreeView上不能正常工作的原因
;
第一个解决方案:您可以让您的树视图
扩展RadTreeView
。我认为,RadTreeView
有一些特殊的依赖属性,并且似乎使用了它自己的定制项目容器。这就是为什么Telerik样式在TreeView
上不能正常工作的原因,尽管它最初是编译的
第二种解决方案:可以提取RadTreeView
样式并对其进行重构,以便将其应用于WPFTreeView
在VisualStudio中,您有两个选项。
第一个选项是遵循以下5个简单步骤:
RadTreeView
),然后右键单击它RadTreeView
)RadTreeView
一起工作
第四种解决方案:如果只有项目容器使样式不兼容,请调整TreeView
以使用Telerik项目容器版本(而不是treevieItem
)。您可以通过扩展TreeView
然后覆盖默认的items容器来实现这一点:
public class MyExtendedTreeView : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is RadTreeViewItem);
}
protected override DependencyObject GetContainerForItemOverride()
{
return new RadTreeViewItem();
}
}
我想这是您的选择。您使用的是Telerik吗?
MetroTreeViewItem
的TargetType
是什么?只能将其应用于此类型的图元。RadTreeView
不是TreeView
。MetroTreeViewItem
的TargetType
是TreeViewItem
,我猜RadTreeViewItem
的TargetType
不是,但我的问题是如何绕过这个问题,将RadTreeView
样式应用到默认的TreeView
我想到的第一个解决方案是您提出的第二个解决方案(我认为它也需要更少的工作),你知道提取RadTreeView
样式的方法吗?@KyriakosXatzisavvas更新了答案,展示了如何提取样式和模板。它仍然不能立即工作,但我想通过一些调整它会工作。我认为这是接近一个正确的答案,谢谢@Kyriakosxatzisavva最好使用第一种方法,并通过XAML设计器窗格提取样式。我觉得样式更详细
public class MyExtendedTreeView : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is RadTreeViewItem);
}
protected override DependencyObject GetContainerForItemOverride()
{
return new RadTreeViewItem();
}
}