我無法找到Panel.IstItemsHost附加屬性的任何良好文檔。我看到很多人在ItemsControl的ItemsContainer模板上設置它的例子,但MSDN上的un-documentation沒有解釋設置屬性賦予的原因或優點。我已經建立了大量不設置此屬性的容器,但尚未注意到任何不良影響。Panel.IsItemsHost究竟做了什麼?
回答
說我有一個ItemsControl。我想要使用自定義面板,可以在滾動時快速瀏覽項目;它被稱爲SwoopPanel。現在,我如何告訴ItemsControl使用我的SwoopPanel來包含它創建的模板?
的快捷方式是設置ItemsPanel上的ItemsControl:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<lol:SwoopPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
然而,有時候這並不爲你工作。也許你想定製在UI中呈現SwoopPanel的方式,解決這個問題的唯一方法是更改ItemsControl的控件模板。現在,您可以將SwoopPanel直接添加到控件模板,並使用該屬性將其標記爲ItemsControl,以便ItemsControl將放置它創建的所有模板化項目。
<Style TargetType="ItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ItemsControl">
<Border CornerRadius="5">
<ScrollViewer VerticalScrollBarVisibility="Hidden">
<lol:SwoopPanel IsItemsHost="True"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
你必須這樣或那樣做嗎?不是。比另一個更有優勢嗎?那麼,第二種方式可以讓你更好地控制UI,第一種方式更簡單。真的,請選擇你的選擇。我從來沒有親自做過第二種方式,但我認爲可能有幾個地方可能有用。
見http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.isitemshost(v=vs.90).aspx
從本質上講,這個帖子說的是,如果您要更換ListBox的控件模板,並希望新的佈局,設置IsItemsHost =真有些面板上,例如一個StackPanel。然後,ListBox中的任何項目將自動添加爲StackPanel的子項。如果列表框的方向是水平的,那麼列表框將是水平的。
另一種方法是將ListBox的ItemsPanel屬性設置爲ItemsTemplate,並在該模板中使用StackPanel。在這種情況下,ListBox項目將被添加到StackPanel子項中,就像在第一種情況下一樣。但是,您不需要設置IsItemsHost = true,它將完全不起作用。這是通過設置ItemsPanel屬性來完成的。
這是解釋+1 – mkb 2015-06-22 23:08:52
- 1. visibleContentsAsDataURL究竟做了什麼?
- 2. KeyListener究竟做了什麼?
- 3. document.normalize究竟做了什麼?
- 4. MapView.preLoad()究竟做了什麼?
- 5. handleParkingUpdate()究竟做了什麼?
- 6. MIBCC.EXE究竟做了什麼?
- 7. UserTransactionManager究竟做了什麼
- 8. rbind.fill.matrix究竟做了什麼?
- 9. rangeOfCharacterFromSet究竟做了什麼?
- 10. 「setContentView」究竟做了什麼?
- 11. fillMode究竟做了什麼?
- 12. .selectAll()究竟做了什麼?
- 13. JspFragment.invoke究竟做了什麼?
- 14. '互斥鎖'究竟做了什麼?
- 15. Android SDK Manager究竟做了什麼?
- 16. QtCreator Build/Clean究竟做了什麼?
- 17. 餅乾。我究竟做錯了什麼?
- 18. Int32.Parse究竟做了什麼?
- 19. Python的struct.pack究竟做了什麼?
- 20. Class :: MethodMaker究竟做了什麼?
- 21. pcap中的ntohs()究竟做了什麼?
- 22. requestValidationMode =「2.0」究竟做了什麼?
- 23. 硒中的ime()究竟做了什麼?
- 24. 這段JavaScript究竟做了什麼?
- 25. Resolve-Path cmdlet究竟做了什麼?
- 26. 全選?我究竟做錯了什麼?
- 27. EntityClient Provider - 它究竟做了什麼?
- 28. 。我究竟做錯了什麼?
- 29. gc_heap :: plan_phase究竟做了什麼?
- 30. Compass/Blurprint的+ clearfix究竟做了什麼?
因此,基本上,ItemsControl代碼將記錄在其層次結構中設置爲IsItemsHost的控件,並且如果沒有設置ItemsPanelTemplate,請將該子代用作生成的子代的容器? (我猜如果你有一個模板和一個IsItemsHost孩子,它可能會拋出)。 – Armentage 2010-05-18 21:25:58
IsItemsHost不是附屬性 – 2010-05-19 12:40:29
@kai謝謝更新。看起來像一個好的候選人;感覺有點奇怪,Panel知道如何實現ItemsControl。 – Will 2010-05-19 12:56:41