如何使默认的 TreeView (System.Windows.Controls) 具有与 RadTreeView (telerik) 相同的样式?
How to make default TreeView (System.Windows.Controls) have the same style as RadTreeView (telerik)?
我尝试简单地将 <TreeView> 更改为 <RadTreeView> 但是它弄乱了一些方法背后的代码,所以我想我可以只应用样式,但我尝试过的都不起作用。
下面的代码工作正常,我尝试将静态资源更改为 RadTreeViewItemStyle 它编译没有问题,但是我在运行时收到错误消息“Can only base on a Style with target type那是基本类型 '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 个简单的步骤:
- 转到 XAML 设计器并打开 设计窗格 (Shift+F7)
- Select 您希望从中提取样式的元素 (
RadTreeView
) 并右键单击它
- 在上下文菜单中 select 编辑模板 -> 编辑副本
- 在对话框中为新提取的样式输入名称并单击 确定
- 您现在回到 XAML 设计器中。寻找新的风格。它被添加到您 select 编辑元素标签以提取样式的同一个文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典
要提取项目模板,请重复步骤 1 和 2。然后从上下文菜单中 select 编辑其他模板 -> 编辑生成的项目 (ItemTemplate)。继续第 4 步和第 5 步。
第二个选项是遵循这 7 个简单的步骤来提取元素的样式:
- 转到 XAML 设计器和 select 您希望从中提取样式的元素的标签 (
RadTreeView
)
- 然后转到 属性 窗格并向下滚动到 杂项 部分
- 展开 杂项 部分并向下滚动到 样式 字段
- 这个场地的右边是一个小方块。左键单击此方块打开上下文菜单
- 在上下文菜单中 select 转换为新资源...。这将打开一个对话框。
- 在对话框中为新样式命名并单击确定
- 您现在回到 XAML 设计器中。寻找新的风格。它被添加到您 select 编辑元素标签以提取样式的同一个文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典
要提取模板,请重复步骤 1 和 2。然后转到 Template 字段。继续执行步骤 4 到 7。
第三个解决方案: 重构您的 code-behind 以使其与 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();
}
}
我想这是你的选择。
我尝试简单地将 <TreeView> 更改为 <RadTreeView> 但是它弄乱了一些方法背后的代码,所以我想我可以只应用样式,但我尝试过的都不起作用。
下面的代码工作正常,我尝试将静态资源更改为 RadTreeViewItemStyle 它编译没有问题,但是我在运行时收到错误消息“Can only base on a Style with target type那是基本类型 '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 个简单的步骤:
- 转到 XAML 设计器并打开 设计窗格 (Shift+F7)
- Select 您希望从中提取样式的元素 (
RadTreeView
) 并右键单击它 - 在上下文菜单中 select 编辑模板 -> 编辑副本
- 在对话框中为新提取的样式输入名称并单击 确定
- 您现在回到 XAML 设计器中。寻找新的风格。它被添加到您 select 编辑元素标签以提取样式的同一个文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典
要提取项目模板,请重复步骤 1 和 2。然后从上下文菜单中 select 编辑其他模板 -> 编辑生成的项目 (ItemTemplate)。继续第 4 步和第 5 步。
第二个选项是遵循这 7 个简单的步骤来提取元素的样式:
- 转到 XAML 设计器和 select 您希望从中提取样式的元素的标签 (
RadTreeView
) - 然后转到 属性 窗格并向下滚动到 杂项 部分
- 展开 杂项 部分并向下滚动到 样式 字段
- 这个场地的右边是一个小方块。左键单击此方块打开上下文菜单
- 在上下文菜单中 select 转换为新资源...。这将打开一个对话框。
- 在对话框中为新样式命名并单击确定
- 您现在回到 XAML 设计器中。寻找新的风格。它被添加到您 select 编辑元素标签以提取样式的同一个文件中,并按照您之前指定的方式命名。它通常被添加到顶级资源字典
要提取模板,请重复步骤 1 和 2。然后转到 Template 字段。继续执行步骤 4 到 7。
第三个解决方案: 重构您的 code-behind 以使其与 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();
}
}
我想这是你的选择。