WPF中TreeView控件的用法_第1頁
WPF中TreeView控件的用法_第2頁
WPF中TreeView控件的用法_第3頁
WPF中TreeView控件的用法_第4頁
WPF中TreeView控件的用法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第WPF中TreeView控件的用法在WPF的TreeView使用方式和WinForm下有很大不同,那些展開某節(jié)點、獲取父節(jié)點,判斷某節(jié)點是否被選中等常用的操作在WinForm下都有相關函數(shù),而在WPF中卻不能輕易實現(xiàn)。

一種常規(guī)的方式是通過MVVM模式來將TreeViewItem節(jié)點中的IsSelect,IsExpanded等屬性來雙向綁定到要顯示的節(jié)點數(shù)據(jù)中,然后直接通過節(jié)點數(shù)據(jù)的屬性來實現(xiàn)相關操作。

但是,有的時候,當我們沒有ViewModel層,但又想像WinFrom那樣直接簡單的獲取或設置這些屬性的時候,該如何辦呢。其實WPF還是提供了類似WinForm中的這些設置的,只不過形式不一樣了而已,但是卻沒WinFrom的那么直觀和方便。CodeProject上就有人將常用函數(shù)總結了一下,寫成了擴展函數(shù),主要提供如下功能:

publicstaticvoidSelectObject(thisTreeViewtreeView,objectobj)

publicstaticvoidSelectObject(thisTreeViewtreeView,objectobj,boolselected)

publicstaticboolIsObjectSelected(thisTreeViewtreeView,objectobj)

publicstaticboolIsObjectFocused(thisTreeViewtreeView,objectobj)

publicstaticvoidExpandObject(thisTreeViewtreeView,objectobj)

publicstaticvoidExpandObject(thisTreeViewtreeView,objectobj,boolexpanded)

publicstaticboolIsObjectExpanded(thisTreeViewtreeView,objectobj)

publicstaticTreeViewItemGetParentItem(thisTreeViewItemitem)

文章地址如下:WPFTreeViewtools

但是,這里面有一個小bug:當TreeView節(jié)點中使用延遲綁定的時候,根據(jù)數(shù)據(jù)節(jié)點獲取TreeItem會失敗。這里我把它修正了一下,感興趣的朋友可以直接使用我修改后的函數(shù)。

publicstaticclassTreeViewTools

///summary

///ReturnstheTreeViewItemofadataboundobject.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///returnsTheTreeViewItemofthedataboundobjectornull./returns

publicstaticTreeViewItemGetItemFromObject(thisTreeViewtreeView,objectobj)

DependencyObjectdObject=GetContainerFormObject(treeView,obj);

TreeViewItemtvi=dObjectasTreeViewItem;

while(tvi==null)

dObject=VisualTreeHelper.GetParent(dObject);

tvi=dObjectasTreeViewItem;

returntvi;

catch{}

returnnull;

privatestaticDependencyObjectGetContainerFormObject(ItemsControlitem,objectobj)

if(item==null)

returnnull;

DependencyObjectdObject=null;

dObject=item.ItemContainerGenerator.ContainerFromItem(obj);

if(dObject!=null)

returndObject;

varquery=fromchildIteminitem.Items.Castobject()

letchildControl=item.ItemContainerGenerator.ContainerFromItem(childItem)asItemsControl

selectGetContainerFormObject(childControl,obj);

returnquery.FirstOrDefault(i=i!=null);

///summary

///SelectsadataboundobjectofaTreeView.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

publicstaticvoidSelectObject(thisTreeViewtreeView,objectobj)

treeView.SelectObject(obj,true);

///summary

///SelectsordeselectsadataboundobjectofaTreeView.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///paramname="selected"selectordeselect/param

publicstaticvoidSelectObject(thisTreeViewtreeView,objectobj,boolselected)

vartvi=treeView.GetItemFromObject(obj);

if(tvi!=null)

tvi.IsSelected=selected;

///summary

///ReturnsifadataboundobjectofaTreeViewisselected.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///returnsReturnstrueiftheobjectisselected,andfalseifitisnotselectedorobjisnotinthetree./returns

publicstaticboolIsObjectSelected(thisTreeViewtreeView,objectobj)

vartvi=treeView.GetItemFromObject(obj);

if(tvi!=null)

returntvi.IsSelected;

returnfalse;

///summary

///ReturnsifadataboundobjectofaTreeViewisfocused.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///returnsReturnstrueiftheobjectisfocused,andfalseifitisnotfocusedorobjisnotinthetree./returns

publicstaticboolIsObjectFocused(thisTreeViewtreeView,objectobj)

vartvi=treeView.GetItemFromObject(obj);

if(tvi!=null)

returntvi.IsFocused;

returnfalse;

///summary

///ExpandsadataboundobjectofaTreeView.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

publicstaticvoidExpandObject(thisTreeViewtreeView,objectobj)

treeView.ExpandObject(obj,true);

///summary

///ExpandsorcollapsesadataboundobjectofaTreeView.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///paramname="expanded"expandorcollapse/param

publicstaticvoidExpandObject(thisTreeViewtreeView,objectobj,boolexpanded)

vartvi=treeView.GetItemFromObject(obj);

if(tvi!=null)

tvi.IsExpanded=expanded;

if(expanded)

//updatelayout,sothatfollowingcallstof.e.SelectObjectonchildnodeswill

//findtheireTreeViewNodes

treeView.UpdateLayout();

///summary

///ReturnsifadoutaboundobjectofaTreeViewisexpanded.

////summary

///paramname="treeView"TreeView/param

///paramname="obj"Databoundobject/param

///returnsReturnstrueiftheobjectisexpanded,andfalseifitiscollapsedorobjisnotinthetree./returns

publicstaticboolIsObjectExpanded(thisTreeViewtreeView,objectobj)

vartvi=treeView.GetItemFromObject(obj);

if(tvi!=null)

returntvi.IsExpanded;

returnfalse;

///summary

///RetunstheparentTreeViewItem.

////summary

///paramname="item"TreeViewItem/param

///returnsParentTreeViewItem/returns

publicstaticTreeViewItemGetParentI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論