如何在子进行RenderTransform后让ScrollViewer更新它的布局?

时间:2012-01-25 23:19:24

标签: .net wpf transformation scrollviewer

我有一个ScrollViewer,其中我使用了Blend控件PathListBox,其子项我会旋转并使用RenderTransfrom缩放。

不幸的是,ScrollViewer大小与我的Ellispe(我正在使用的控件作为我的路径)的大小相比,我无法弄清楚如何获取ScrollViewer's视口包括整个控件(所有PathListBoxItem s。)

我认为它的大小不能达到我的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>

2 个答案:

答案 0 :(得分:1)

RenderTranforms不会影响布局。来自here

  

渲染变换不会重新生成布局大小或渲染大小信息。渲染变换通常用于为元素设置动画或应用临时效果。例如,元素在聚焦或鼠标悬停时可能会变焦,或者可能会在加载时抖动以吸引眼球到用户界面(UI)的那一部分。

你想要的是LayoutTransform。来自here

  

与RenderTransform相比,LayoutTransform会影响布局结果。

  

LayoutTransform有用的示例场景包括:旋转元素,如水平到垂直的菜单组件,反之亦然,焦点上的缩放元素(放大),提供编辑行为等。

听起来你正在使用错误的布局元素(除了使用错误的转换),但由于你实际上没有说出你想做什么,所以很难分辨。当你执行LayoutTransform时它仍然关闭东西的原因可能是因为没有足够的空间让项目在可用空间中完全渲染。

编辑:

使用自定义面板类型提供我建议的其他信息:“径向”面板。示例herehere

答案 1 :(得分:0)

我暂时实施了一个掩盖问题的黑客攻击。我仍然在寻找一种更正确的方法来解决这个问题。 :)

我在网格中添加了一个透明的矩形,并使其宽度等于Ellipse的大小+已转换的(长度)PathListBoxItems的大小。

滚动区域现在允许我滚动到之前剪切过的区域。

编辑:我会将此标记为目前的答案,因为它确实有效。我只是觉得这不是最好的解决方案,所以我愿意将另一个答案标记为正确。