我试图简单地将<< em> TreeView >更改为<< em> 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>;
答案 0 :(得分:1)
第一个解决方案: :您可以将TreeView
扩展为RadTreeView
。我认为RadTreeView
具有一些特殊的依赖项属性,并且似乎也使用了它自己的自定义项目容器。这就是Telerik样式虽然在最初编译时仍无法在TreeView
上正常工作的原因。
第二个解决方案: :可以提取RadTreeView
样式并对其进行重构,以便可以将其应用于WPF TreeView
。 / p>
在Visual Studio中,您有两个选择。 第一种选择是遵循以下5个简单步骤:
RadTreeView
)中提取样式的元素,然后右键单击它要提取项目模板,请重复步骤1和2。然后从上下文菜单中选择编辑其他模板->编辑生成的项目(ItemTemplate)。继续执行步骤4和5。
第二个选项是按照以下7个简单步骤提取元素的样式:
RadTreeView
)中提取样式的元素的标签要提取模板,请重复步骤1和2。然后转到 Template 字段。继续执行步骤4至7。
第三种解决方案: :重构后台代码,使其与RadTreeView
一起使用。
第四种解决方案: :如果仅是使样式不兼容的项目容器,请调整TreeView
以使用Telerik项目conatiner版本(而不是TreeViewItem
)。您可以通过扩展TreeView
然后覆盖默认的项目容器来做到这一点:
public class MyExtendedTreeView : TreeView
{
protected override bool IsItemItsOwnContainerOverride(object item)
{
return (item is RadTreeViewItem);
}
protected override DependencyObject GetContainerForItemOverride()
{
return new RadTreeViewItem();
}
}
我认为这是您的选择。