我無法找到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. #!perl究竟做了什麼?
- 2. document.normalize究竟做了什麼?
- 3. 「uniquetol」究竟做了什麼?
- 4. EwfSysprepSpecialize究竟做了什麼?
- 5. UserTransactionManager究竟做了什麼
- 6. __block究竟做了什麼?
- 7. offsetLeftAndRight()究竟做了什麼?
- 8. runtime.Gosched究竟做了什麼?
- 9. visibleContentsAsDataURL究竟做了什麼?
- 10. .selectAll()究竟做了什麼?
- 11. mesh.optimize究竟做了什麼?
- 12. rangeOfCharacterFromSet究竟做了什麼?
- 13. has_one究竟做了什麼?
- 14. presentModalViewController究竟做了什麼?
- 15. Ember.MODEL_FACTORY_INJECTIONS究竟做了什麼?
- 16. 「setContentView」究竟做了什麼?
- 17. MIBCC.EXE究竟做了什麼?
- 18. MapView.preLoad()究竟做了什麼?
- 19. rbind.fill.matrix究竟做了什麼?
- 20. KeyListener究竟做了什麼?
- 21. JspFragment.invoke究竟做了什麼?
- 22. HttpApplicationState.Lock究竟做了什麼?
- 23. clEnqueueWriteBuffer究竟做了什麼?
- 24. handleParkingUpdate()究竟做了什麼?
- 25. Android,Proguard究竟做了什麼?
- 26. Initialize Component方法究竟做了什麼?
- 27. hashListeningEnabled - 它究竟做了什麼?
- 28. EntityClient Provider - 它究竟做了什麼?
- 29. 這段代碼究竟做了什麼?
- 30. Vagrant命令究竟做了什麼?
因此,基本上,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