2011-05-22 19 views
1

基本上,我有一個小組根據DependencyProperty(FooProperty)繪製它的孩子。WPF:你如何從自定義面板中「取消」一個子項目?

如果FooProperty爲true,則安排孩子;否則,不安排。第一次通過是好的,但是當孩子將FooProperty從true(繪製)更改爲false(不繪製)時,ArrangeOverride方法會跳過該方法,並且該子項仍然繪製。

我認爲,不應該跳過不應該畫的孩子,我需要一些方法來解除它們?

+2

您是否嘗試過可見性摺疊屬性值?如果適用,那麼聽起來像你需要的東西 – iltzortz 2011-05-22 12:40:14

+0

你怎麼「畫」他們?通常在WPF中,你只需將它們從視覺樹中移除或(如邁克爾所說)將它們設置爲Visibility.Collapsed。但是,我們需要看一些代碼,以便知道如何添加/繪製它們。 – Tim 2011-05-22 16:48:48

回答

4

你不「拉」一個子項目。發生什麼事是什麼時候觸發ArrangeOverride通過你只需做你的數學繪製/重繪它。

如果要「僞跳過」該項目,則不能。一旦繪製完成,它必須重繪。但是,您始終可以使用Rect(0,0)在Point(0,0)處繪製它。基本上你把它變成沒有任何東西。


那麼有沒有一種方法來「真正」取消該項目?是的,以某種方式將它從InternalChildren集合中刪除。您可以通過從Visual Tree中刪除項目來完成此任務,或者如果您是面板是ItemsSource的主機面板,則可以從ItemsSource集合中刪除該項目。

相關問題