WPF Page和UserControl的區別

2021-06-16 13:10:52 字數 4632 閱讀 3867

page 是從 usercontrol 繼承的,首先就有著「is a usercontrol」 的關係;

page 封裝了對 frame 的導航,這也是 page 的最大特點和職責,而 usercontrol 沒有這個職責。

因為 usercontrol 從 uielement 繼承,這樣就導致了 usercontrol 可以用在  

this.rootvisual = usercontrol ;

grid.children.add( usercontrol );

等等地方使用(其效果往往就是使usercontrol呈現在介面上),而由於「page is a usercontrol」 ,這就往往讓人搞不清楚是要使用page還是usercontrol。在使用場合上,個人認為是顧名思義就可以了,如果你用過 asp.net ,那麼 page 就相當於是乙個個的 .aspx 頁面,而 usercontrol 則是 .aspx 中使用的自定義控制項。

自己做東西的時候編譯報錯:

未處理system.windows.markup.xamlparseexception

hresult=-2146233087

source=presentationframework

linenumber=3

lineposition=9

stacktrace:

在 system.windows.markup.wpfxamlloader.load(xamlreader xamlreader, ixamlobjectwrite***ctory write***ctory, boolean skipjournaledproperties, object rootobject, xamlobjectwritersettings settings, uri baseuri)

在 system.windows.markup.wpfxamlloader.loadbaml(xamlreader xamlreader, boolean skipjournaledproperties, object rootobject, xamlaccesslevel accesslevel, uri baseuri)

在 system.windows.markup.xamlreader.loadbaml(stream stream, parsercontext parsercontext, object parent, boolean closestream)

在 ms.internal.threading.exceptionfilterhelper.trycatchwhen(object source, delegate method, object args, int32 numargs, delegate catchhandler)

在 system.windows.threading.dispatcheroperation.invokeimpl()

在 system.windows.threading.dispatcheroperation.invokeinsecuritycontext(object state)

在 system.threading.executioncontext.runinternal(executioncontext executioncontext, contextcallback callback, object state, boolean preservesyncctx)

在 system.threading.executioncontext.run(executioncontext executioncontext, contextcallback callback, object state, boolean preservesyncctx)

在 system.threading.executioncontext.run(executioncontext executioncontext, contextcallback callback, object state)

在 system.windows.threading.dispatcheroperation.invoke()

在 system.windows.threading.dispatcher.processqueue()

在 system.windows.threading.dispatcher.wndprochook(intptr hwnd, int32 msg, intptr wparam, intptr lparam, boolean& handled)

在 ms.win32.hwndsubclass.dispatchercallbackoperation(object o)

在 ms.internal.threading.exceptionfilterhelper.trycatchwhen(object source, delegate method, object args, int32 numargs, delegate catchhandler)

在 system.windows.threading.dispatcher.legacyinvokeimpl(dispatcherpriority priority, timespan timeout, delegate method, object args, int32 numargs)

在 ms.win32.hwndsubclass.subclasswndproc(intptr hwnd, int32 msg, intptr wparam, intptr lparam)

在 ms.win32.unsafenativemethods.dispatchmessage(msg& msg)

在 system.windows.threading.dispatcher.pushframeimpl(dispatcherframe frame)

在 system.windows.threading.dispatcher.pushframe(dispatcherframe frame)

在 system.windows.threading.dispatcher.run()

在 microsoft.visualstudio.hostingprocess.hostproc.runusersassembly()

在 system.threading.threadhelper.threadstart_context(object state)

在 system.threading.executioncontext.runinternal(executioncontext executioncontext, contextcallback callback, object state, boolean preservesyncctx)

在 system.threading.executioncontext.run(executioncontext executioncontext, contextcallback callback, object state, boolean preservesyncctx)

在 system.threading.executioncontext.run(executioncontext executioncontext, contextcallback callback, object state)

在 system.threading.threadhelper.threadstart()

innerexception: system.invalidoperationexception

hresult=-2146233079

message=page 只能具有 window 或 frame 父級。

source=presentationframework

stacktrace:

在 system.windows.controls.page.onvisualparentchanged(dependencyobject oldparent)

在 system.windows.media.visual.fireonvisualparentchanged(dependencyobject oldparent)

在 system.windows.media.visual.addvisualchild(visual child)

在 system.windows.media.visualcollection.connectchild(int32 index, visual value)

在 system.windows.media.visualcollection.add(visual visual)

在 system.windows.controls.uielementcollection.addinternal(uielement element)

在 system.windows.controls.uielementcollection.add(uielement element)

innerexception: 

這報錯,我能看懂的只有這句:

source=presentationframework

linenumber=3

lineposition=9

上網查了半天,由對比其他人寫的東西發現了page和usercontrol這裡有不同。也正好是用到文章裡說的那個函式在報錯。查到這個我還是挺高興的。但是只把xaml和相應的.cs改了好像還是沒起到我想要的效果,雖然不報錯。我還是再去看看吧。。

我想在乙個grid中巢狀乙個grid1,然後在滑鼠進入grid1的範圍以後在視窗中顯示一些影象。就像下棋,在棋盤裡顯示棋子一顆一顆落下的。路過的有經驗的朋友給我提些建議吧~影象總是顯不出來。

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...

if和switch和for語句

if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...