2010-01-26 24 views
0

我正在製作一個時間線,用戶單擊開始和停止按鈕時會標記音頻信號的區域。用戶可以在採樣會話期間多次點擊開始和停止,並且按下之間的時間應作爲突出顯示的部分出現在時間線中。自定義面板編碼有問題 - 無法弄清楚如何訪問兒童的屬性

整體設計是其ItemsPanelTemplate是自定義面板的ItemsControl。每個面板代表一個音軌。該面板具有StartTime和EndTime依賴項屬性,該屬性是UserControl的「開始」和「結束」屬性的數據綁定,以便我可以控制從一對屬性中查看所有曲目的時間量。 ItemsControl是綁定到ObservableCollection的數據,Track是ObservableCollection。這裏的意圖是,當我添加一個新的突出顯示時,會更新Track,然後添加/覆蓋ObservableCollection中的Track,它應該自動更新我的GUI。

亮點如下:

public class Highlight 
{ 
    public DateTime Start { get; set; } 
    public DateTime End { get; set; } 
    public string Description { get; set; } 

    public Highlight() {} 

    public Highlight(DateTime start, DateTime end, string description) 
    { 
     Start = start; 
     End = end; 
     Description = description; 
    } 
} 

我相信我有正確編碼除了一個小細節的用戶控件和麪板(其中最重要的,其實)。當我單擊「開始」和「停止」時,向OC添加一個新的突出顯示實例,並設置簡單的舊C#屬性描述,開始和結束。

當用戶單擊End並且所有對象得到更新時,最終我的Panel的ArrangeOverride被調用,並且我需要獲取Highlight的Start和End屬性。這使我可以計算出賽道開始時間的偏移量,並在正確的位置繪製高光。問題是我只有UIElements與(小組的兒童)合作。我不能將它轉換爲我的Highlight對象,所以我假設我需要在某處爲XAML中的突出顯示設置數據綁定,以便它自動提取正確的C#屬性值。

對不起,對於冗長的描述,但我認爲我的問題歸結爲這個問題 - 我如何設置XAML或代碼,以便我的面板的UIElements正確地綁定到基礎的Highlight實例?

非常感謝您的幫助。我從這裏的所有人那裏學到了很多東西,但在我掌握這些主題之前,顯然還有很長的路要走。

編輯 - 我錯了,我的每個軌道的開始和結束的數據綁定不起作用。我在我的用戶爲每過一個DependencyProperty,我想我可以從XAML數據綁定到他們迫使軌道板的大小,如下所示:

<ItemsControl.ItemContainerStyle> 
    <Style> 
     <Setter Property="local:Track.StartTime" Value="{Binding Path=Start}"/> 
     <Setter Property="local:Track.EndTime" Value="{Binding Path=End}"/> 
    </Style> 
</ItemsControl.ItemContainerStyle> 

,但沒有奏效。我想我需要先解決這個問題,因爲如果StartTime和EndTime沒有正確設置,ArrangeOverride調用將因無限大小的請求而失敗。

回答

0

好吧,我終於搞定了。實現此功能的正確方法是在我的「跟蹤」面板上使用附加的屬性。然後,我只需將Start和End附加屬性數據綁定到我的Highlight類中的Start和End屬性。有一次,我遇到了編譯問題,因爲在我的Track類中顯然沒有找到開始和結束附加屬性,幸運的是,在重新閱讀關於它們的MSDN文章後,我意識到我更改了屬性的名稱而不更改setter/accessor方法的名字!!!