我正在製作一個時間線,用戶單擊開始和停止按鈕時會標記音頻信號的區域。用戶可以在採樣會話期間多次點擊開始和停止,並且按下之間的時間應作爲突出顯示的部分出現在時間線中。自定義面板編碼有問題 - 無法弄清楚如何訪問兒童的屬性
整體設計是其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調用將因無限大小的請求而失敗。