[英]How to make default TreeView (System.Windows.Controls) have the same style as 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
樣式並重構它,以便它可以應用於WPF TreeView
。
在Visual Studio中,您有兩個選項。 第一個選擇是遵循以下5個簡單步驟:
RadTreeView
)中選擇要從中提取樣式的元素,然后右鍵單擊它 要提取項目模板,請重復步驟1和2.然后從上下文菜單中選擇編輯其他模板 - >編輯生成的項目(ItemTemplate) 。 繼續第4步和第5步。
第二個選項是遵循這7個簡單的步驟來提取元素的樣式:
RadTreeView
)中選擇要從中提取樣式的元素的標記 要提取模板,請重復步驟1和2.然后轉到“ 模板”字段。 繼續執行步驟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();
}
}
我認為這是你的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.