2012-01-25 52 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剪切“光线”并仅显示符合大小的区域 –

相关问题