我正在寫一個小型音頻應用程序(在Silverlight中,但這並不是真正相關的,我想),而且我正在努力解決以前遇到的問題,正確解決。這次我想說得對。在用戶界面中處理對象的選擇和取消選擇
在應用程序中有一個Arrangement控件,它包含多個Track控件,每個Track可以包含AudioObject控件(這些都是自定義用戶控件)。用戶需要能夠選擇音頻對象,並且選擇這些對象時,它們的渲染方式會有所不同。我可以通過掛入AudioObject控件的MouseDown事件並相應地設置狀態來實現此目的。到目前爲止這樣好,但是當選擇一個音頻對象時,所有其他音頻對象都需要被取消選擇(當然,除非用戶按住shift鍵)。音頻對象雖然不知道其他音頻對象,所以他們無法告訴其他音樂對象自行取消選擇。
現在,如果我會像上次那樣處理這個問題,我會在AudioObject控件的構造函數中傳遞對Arrangement控件的引用,並給Arrangement控件一個DeselectAll()方法或類似的東西,告訴所有Track控件取消選擇所有的AudioObject控件。這種感覺是錯誤的,如果我將這一策略應用於類似的問題,我恐怕很快會結束每一個對象,引用其他每個對象,從而產生一個緊密相連的混亂。感覺就像打開設計不佳的代碼的閘門一樣。
有沒有更好的方法來處理這個問題?
嗯,這讓我意識到用戶也應該能夠點擊軌道的某個部分,導致該軌道上的所有音頻對象被一次選中。我想這對您的解決方案來說仍然是非常可行的。而當我想到其他功能時,我想要實現它,變得越來越清晰,安排控制應該處理這些事情。 (當我想到時,我只是添加了一些東西 - 我沒有真正的計劃......並不是解決我所瞭解的項目的最佳方式。) – Dennis 2009-12-28 20:40:59