根據我的理解,將 設定DataContext為控制元件本身將允許您使用資料系結訪問該控制元件的屬性而無需指定Source,因此將DataContexta設定Window為{Binding RelativeSource={RelativeSource Self}}應該只允許您將資料系結到Window類中定義的屬性,而不是代碼隱藏中的那些,因為代碼隱藏檔案只繼承了Window類,而我在代碼隱藏檔案中定義的屬性不直接屬于Window該類。但是,當我這樣做時,它神奇地允許我將資料系結到我在代碼隱藏檔案中定義的屬性。這是如何運作的?
uj5u.com熱心網友回復:
是的,將DataContext控制元件的 設定為自身允許您在Binding.
代碼隱藏
public MyWindow() { DataContext = this; InitializeComponent(); }在 XAML 中創建 a
Binding將自動繼承 thisDataContext作為Source系結,如果它沒有被覆寫,例如一個專案被設定為DataContext在一個ItemsControl.資料背景關系是一個概念,它允許元素從其父元素繼承有關用于系結的資料源的資訊,以及系結的其他特征,例如路徑。[...]
XAML
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" x:Class="MyWpfApp.MyWindow" ... DataContext="{Binding RelativeSource={RelativeSource Self}}">將
RelativeSource設定Source為Binding視窗本身。如果您使用AncestorType={x:Type Window}.通過指定系結源相對于系結目標位置的位置來獲取或設定系結源。
您不能在單個系結上設定多個不同的源。
RelativeSource: 互斥 vs withElementNameandSource;
本質上,你永遠不會在不設定 a 的情況下系結Source,它是隱式或顯式設定的。
Binding如果您指定 aWindow作為源,那么為什么作業呢?您必須了解,XAML 檔案和您的代碼隱藏在編譯后是同一個類。它們都是partial在編譯時合并的定義。您繼承自 是對的Window,但您對系結的理解是錯誤的。如果我們談論類繼承,你是對的,MyWindow通過Window參考訪問派生將不允許你訪問它的屬性,但是系結不能以這種方式作業。它們是松散地將依賴屬性耦合到被系結屬性的運算式。它們僅在運行時決議,這意味著它們應用于實際的運行時型別的DataContext,即MyWindow。
將屬性值延遲為資料系結值,創建中間運算式物件并解釋在運行時應用于元素及其系結的資料背景關系。
您可以分配和切換任意不同型別的任意型別object。DataContext只要Path任何系結的 與任何屬性值匹配,就會成功決議,否則會出現系結錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456540.html
上一篇:具有特定屬性的一般樣式
下一篇:WinUI進度圈如何改變粗細?
