2014-02-18 153 views
1

我有一個ScrollViewer分層的內容。例如:指定面板的滾動所有者

<ScrollViewer> 
    <Grid> 
     <Child x:Name="Layer1" /> 
     <Child x:Name="Layer2" /> 
     <Child x:Name="Layer3" /> 
    </Grid> 
</ScrollViewer> 

孩子們需要在彼此之上,並有相同的大小。現在,我的Child類實現了IScrollInfo。考慮上面的網格。我想選擇一個孩子是ScrollViewer的擁有者。因此,「Layer1」將更新滾動條,其他圖層將確保它們與滾動所有者具有相同的大小。像這樣的東西會一直很大:

<Grid ScrollViewer.ScrollOwner="Layer1"> 

顯然,Grid是錯誤控制在這裏使用。 WPF是否支持類似以上的開箱即用的功能?如果不是,那麼完成此行爲的最佳方法是什麼?

回答

0

沒有什麼特別優雅的想法。一個(稍微繁瑣的)選項是將子類Grid實施爲IScrollInfo並將所有這些功能委託給適當的孩子,可能通過定製網格上的屬性進行設置。即沿着線:

public IScrollInfo Scroller { get; set; } 

bool IScrollInfo.CanHorizontallyScroll 
{ 
    get { return Scroller.CanHorizontallyScroll; } 
    set { Scroller.CanHorizontallyScroll = value; } 
} 

你需要看這個重定向足夠早安排,它使用的ScrollViewer之前,這可能是一個痛苦。

另一種選擇是注意ScrollViewer有一個ScrollInfo保護屬性指向IScrollInfo子對象。你可以子類ScrollViewer並設置這個,雖然這看起來有點哈克 - 我只是試過了,現在還不清楚什麼時候必須設置。

最後,你可以考慮有一些設計問題,你有3個兄弟姐妹其中一個比其他人更「特別」 - 也許你真的應該有一個自定義面板包含這些兒童定義你的IScrollInfo行爲。

請注意,您使用的術語ScrollOwner已經是IScrollInfo中用於引用控制滾動查看器的概念。

+0

這足以作爲一個答案,因爲它揭示了'IScrollInfo'。儘管如此,我最終還是讓其他孩子的「ScrollViewer」的一個*孩子與第一個孩子的「ActualWidth」和「ActualHeight」綁定。 – l33t