2010-06-17 83 views
1

我正在使用選框列表水平列表視圖。哪些從右向左繼續移動。如何從選取框列表的第一個項目和最後一個項目中刪除空格?

我的代碼是:

 double height = canMain.ActualHeight - marqueeList.ActualHeight; 
     marqueeList.Margin = new Thickness(0, 0, 0, 0); 
     doubleAnimation.From = -marqueeList.ActualWidth; 
     doubleAnimation.To = canMain.ActualWidth; 
     doubleAnimation.RepeatBehavior = RepeatBehavior.Forever; 
     doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds)); 
     Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Right)")); 
     _storyBoard.Children.Add(doubleAnimation); 
     _storyBoard.Begin(marqueeList, true) 

但是一旦移動完全有空格來,直到再次中的第一項不來。 我想刪除第一項之間的空白空間,最後一個項目。(像circullar)

請幫我在這...它的迫切!

回答

2

如果您的ListView項目不需要鼠標或鍵盤交互你可以把一個矩形視覺刷到它的右:

<DockPanel Name="marqueeListTwice"> 
    <ListView Name="marqueeList" .../> 
    <Rectangle Height="{Binding RenderHeight,ElementName=marqueeList}" 
       Width="{Binding RenderWidth,ElementName=marqueeList}"> 
    <Rectangle.Fill> 
     <VisualBrush Visual="{Binding ElementName=marqueeList}" /> 
    </Rectangle.Fill> 
    </Rectangle> 
</DockPanel> 

這DockPanel中將會出現有兩個並排ListView的側面副本:左邊的是真實的,右邊的是帶有圖片的矩形。 VisualBrush繪畫機制是「完美的」,因爲你無法從真實的東西中分辨出繪畫的副本。

現在你可以動畫在你的畫布「marqueeListTwice」控制marqueeList.ActualWidth的距離。當你到最後你會看到第一個項目,但你實際上會看着它在矩形上畫的圖像。當你回到0時,「真正的」第一個項目將再次可見,但由於它在視覺上相同,所以不會像閃爍那麼多。

如果需要個別項目油鍋中,用鼠標進行交互,該解決方案將無法工作,因爲如預期的那樣畫矩形不會迴應:你需要邏輯滑動個別項目,而不是周圍的滑動一個ListView包含所有這些。您仍然可以使用動畫來執行此操作:只需爲容器Window或UserControl的屬性設置動畫,然後使用它來計算您的項目位置。

+0

感謝烏拉圭回合的答覆!但我需要在我的選取框列表上使用鼠標,所以沒有其他方式來實現它? – 2010-06-18 15:17:42

+0

是的。正如我在最後一段中提到的,您可以使用自己的邏輯將項目精確地滑到您想要的位置,而不是使用ListView爲您完成。我會用自定義Panel子類來做到這一點。自定義面板將有一個屬性「Offset」,它可以從0到1或從0到ItemCount計數。該屬性將設置InvalidatesArrange標誌。然後在你的ArrangeOverride你會使用偏移值,孩子大小等。該計算的細節取決於您的具體需要計算所有孩子的位置。 – 2010-06-18 19:38:44

+0

要使數據綁定與自定義面板一起工作,您可以繼續使用ListView並將其ItemsPanel屬性設置爲ItemsPanelTemplate,其中包含您的自定義面板類的實例,並根據需要綁定其Offset屬性。然後,只需動畫到這個偏移是綁定的屬性,這將導致Offset屬性更新和ArrangeOverride重新計算的位置。 – 2010-06-18 19:41:08

相關問題