我想學習WPF,但我發現很難理解綁定,「資源」和對象創建。 我的背景是C++/MFC和C#-Winforms。初學者 - 關於WPF中綁定和資源的困惑
我的問題:
大多數我看到的例子在XAML(可在MSDN和另外兩個WPF的書我讀過)使用靜態資源的綁定表達式。這些與靜態成員有什麼關係?或者這只是一個誤導性的名字?當引用任何對象作爲StaticResource時,它是什麼時候實例化的?
至於我可以看到StaticResources與應用程序/窗/控制的「資源」部分等中定義的「東西」用
現在,這些資源的部分都非常混亂給我。 他們究竟是什麼?從我在MFC中的經驗來看,這些是圖標,字符串等。然而,從我看到的所有例子來看,在WPF中,這些似乎本質上是一個「傾銷地」,它們可以用於各種全局對象定義在標記中(樣式,數據模板等) (b)標記中的各種全局對象實例 我正確嗎?這讓我感到非常混亂。
它主要包括學習XAML中的各種半DSL(用於定義樣式,用於定義數據模板,用於創建對象等),並將它們粘在一起放在同一個地方。 我一直在想,如何在MFC中手動編輯資源文件(.rc)。至少在那裏這些部分是分開的,每種資源的語法都比較簡單。爲了解決前面兩個問題:當我在Resources部分中定義一個對象實例,並且稍後從StaticResource綁定中引用它時,它的實例是什麼時候? MSDN說,(在「如何:使數據可用於XAML綁定」):
一個辦法可以使對象 可結合是 它定義爲一個資源
但是,這不是很清楚。他們的意思是什麼?他們的意思是創建?他們的意思是連接綁定子系統嗎?何時該對象創建爲? 從一個簡單的例子中,我看到WPF似乎爲它創建這個對象,當它試圖附加綁定。這更令人困惑。
編輯: 經過下面karmicpuppet的澄清之後,我仍然對這是如何連接到綁定感到困惑。 假設我有我的資源:
<local:Person x:Key="MyPerson" Name="Title"/>
(其中人是一個名爲名稱屬性的類),然後在窗口中我有:
<TextBlock Text="{Binding Source={StaticResource MyPerson}, Path=Name}"/>
1)這是什麼呢?它是否經歷了相同的步驟 - 搜索資源並將其應用於Text屬性? MyPerson對象是否在創建窗口時或之後創建? 2)我是否必須使用綁定機制綁定到Name屬性?我不能像上面用myBrush那樣直接綁定它嗎?爲什麼我不能做這樣的事情?
<TextBlock Text="{StaticResource MyPerson, Path=Name}"/>
它只是框架方面的近視嗎?我認爲我在這裏失蹤很大,但我似乎無法理解什麼...
3)我嘗試使用DynamicResource,但我對每一步我都非常困惑。 A)中加入在上面的代碼我的單個窗口類一個DependencyProperty爲DependencyObject(是此DependencyObject必要?)
public class SomeText : DependencyObject
{
public string Header
{
get { return (string)GetValue(HeaderProperty); }
set { SetValue(HeaderProperty, value); }
}
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(string), typeof(SomeText), new UIPropertyMetadata(0));
}
b)中添加了它的一個實例的Windows.Resources(這是必要的與DynamicResource?MSDN似乎說沒有,但如果讓我無法弄清楚如何做到在XAML下一步)
三)我都嘗試:
Text="{Binding Source={DynamicResource HeaderText}, Path=Header}"
這給了我一個例外,
Text="{DynamicResource HeaderText}"
但我不明白的地方把路徑Header屬性。
這是我第五次嘗試最近擺弄WPF,每次我都被這個看似簡單的事情搞砸了。我已經閱讀了2本書,並且我非常想了解MSDN文章,但是它們根本沒有任何幫助。
等到你發現自己需要一次性即時動畫.. – Blindy 2010-08-28 16:27:03