2012-01-25 62 views
2

我有一個ScrollViewer,其中我使用混合控制PathListBox,我的孩子們旋轉和縮放RenderTransfrom如何在孩子做RenderTransform後讓ScrollViewer更新它的佈局?

不幸的是,ScrollViewer大小以我Ellispe的大小(控制,我使用我的路),我想不出如何讓ScrollViewer's視包括整個控制(所有PathListBoxItem秒。 )

我認爲它不會大小我PathListBox控件的大小完全是因爲我RenderTransform的原因,但我想用LayoutTransform代替它,它仍然削減了的東西(不是那麼糟糕,雖然,但一個LayoutTransform不是我所需要的)。

我的XAML看起來像這樣(爲簡單起見,我留下了一些東西了):

<ScrollViewer> 
    <Grid> 
     <Ellipse ... /> 
     <ec:PathListBox ...> 
      <ec:PathListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RenderTransform> 
          <TransformGroup> 
           <RotateTransform Angle="-90" /> 
           <TranslateTransform X="{Binding ...}" 
          </TransformGroup> 
         <Grid.RenderTransform> 
         <Rectangle ... /> 
        </Grid> 
       </DataTemplate> 
      </ec:PathListBox.ItemTemplate> 
      <ec:PathListBox.LayoutPaths> 
       <ec:LayoutPath SourceElement="{Binding ElementName=ellipse}" ... /> 
      </ec:PathListBox.LayoutPaths>  
     </ec:PathListBox> 
    </Grid> 
</ScrollViewer> 

回答

0

我實現了一個黑客暫時掩蓋了問題。我仍然在尋找更正確的方法來解決問題。 :)

我在網格中添加了一個透明的Rectangle,並使其寬度等於Ellipse的大小+已轉換的(長度)PathListBoxItems的大小。

滾動區域現在允許我滾動到以前剪輯的區域。

編輯:我將它標記爲暫時的答案,因爲它確實有效。我只是不覺得這是最好的解決方案,所以我會願意將另一個答案標記爲正確的。

1

RenderTranforms不會影響佈局。從here

渲染轉換不會重新生成佈局大小或渲染大小信息。渲染變換通常用於對元素進行動畫處理或應用臨時效果。例如,該元素可能會在聚焦或蒙上陰影時放大,或者可能會在加載時產生抖動,以引起用戶界面(UI)部分的注意。

你想要的是一個LayoutTransform。從here

與RenderTransform相比,LayoutTransform會影響佈局結果。

實施例場景中LayoutTransform將是有用的包括:旋轉元件,例如從水平到垂直或者反之亦然菜單組件,縮放上聚焦元件(放大),提供編輯行爲,等。

這聽起來像你使用了錯誤的佈局元素(除了使用了錯誤的變換),但是很難講,因爲你實際上並沒有說你想要做什麼。當您執行LayoutTransform時,它仍然沒有切斷東西的原因可能是因爲沒有足夠的空間讓項目在可用空間中完全呈現。

編輯:

提供額外的信息,我建議使用自定義面板類型:「徑向」面板。示例herehere

+0

我的確嘗試過使用佈局轉換,但它仍然修剪了一些東西:( –

+0

如果您可以更具體地瞭解您正在嘗試做什麼,那麼我可以更具體地說明如何解決您的問題 – mydogisbox

+0

最初pathlistbox將它們的項目放在與圓相切的位置,然後旋轉並平移它們,使它們看起來好像它們像太陽光線一樣從圓形出來,scrollviewer剪切「光線」並僅顯示符合大小的區域 –

相關問題