2010-04-27 86 views
1

我是WPF品牌嶄新的品牌,我正在嘗試與項目一起玩,以更好地理解我正在閱讀的內容。創建資源實例?

我對資源的理解是它的這個實例,你不能像工廠一樣使用它並創建它的實例。例如,一個XAML定義的矩形。你可以引用它,但是你不能在整個表面上有很多實例。

在WPF中,將有什麼辦法做到這一點?如果我將Rectangle定義爲具有特定屬性的資源,並希望在動態生成的網格中包含多個實例,那麼我應該如何處理它?還是有不同的方式,我應該試圖做到這一點?

純粹的學術運動,沒有現實世界的應用。

回答

2

其實沒有什麼特別的資源可以阻止你多次使用它。一個完美的例子就是刷資源,樣式資源等。您可以在XAML中定義它們,並且XAML解析器創建資源的單個實例並將它們存儲在資源字典中,這些刷子,樣式等可以用作屬性值即使只創建了資源的單個實例,也是多次。

但話雖如此,正如您所說,您無法真正定義一個Rectangle資源並在視覺樹中多次使用它。這與它是一種資源無關,而是與FrameworkElement不能是多於一個父元素的子元素有關。

所以我們有什麼被稱爲「模板」。這些告訴WPF如何創建一個元素樹,但實際上並沒有創建樹,直到你實例化模板。下面是一個例子。

<UserControl> 
    <ItemsControl ItemsSource="{Binding WholeBunchOfItems}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Rectangle Fill="Yellow" /> 
        <ContentPresenter Content="{Binding}" /> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</UserControl> 

在這個例子中,我已經將ItemsControl綁定到某種類型的集合。對於集合中的每個項目,ItemsControl將使用我的DataTemplate來呈現項目。在DataTemplate中,您可以使用數據綁定來訪問當前項目。

我建議讀取有關ControlTemplate, DataTemplate, and Style的MSDN。這些都是WPF/Silverlight中的重要概念。

0

要獲得在網格或列表框中複製的多個實例,需要設置數據模板以爲每行數據定義UI控件,然後將網格或列表框數據綁定到確定有多少行的數據集合和個別字段值。

您首先要研究的關鍵術語:數據模板。

+0

感謝您的快速回復。 – redman 2010-04-27 16:46:38

+0

NP。在一次沉悶的公司會議期間拖動計算器。 ;> – dthorpe 2010-04-27 17:13:28