Silverlight CliptoBound属性问题

Silverlight CliptoBound属性问题,silverlight,Silverlight,我正在开发Silverlight应用程序,我的问题是这样的:我有一个WrapPanel 在WrapPanel中,我添加了一些图像。然后,我旋转这些图像 90度或-90度 因此,如果我的图像大小是200 x 250,当我旋转它时,它将从WrapPanel中消失50像素。有没有办法将此图像剪裁到WrapPanel的实际边界?听起来像是在使用RenderTransform旋转图像。问题是,在分配图像的大小和位置后应用变换,因此旋转后的图像会在其原始矩形之外 一种解决方案是使用layouttransfo

我正在开发Silverlight应用程序,我的问题是这样的:我有一个
WrapPanel
WrapPanel
中,我添加了一些图像。然后,我旋转这些图像 90度或-90度


因此,如果我的图像大小是200 x 250,当我旋转它时,它将从
WrapPanel
中消失50像素。有没有办法将此图像剪裁到WrapPanel的实际边界?

听起来像是在使用RenderTransform旋转图像。问题是,在分配图像的大小和位置后应用变换,因此旋转后的图像会在其原始矩形之外

一种解决方案是使用
layouttransformer
来实现该转换。这将导致WrapPanel重新流动元素,甚至将图像移动到下一行。以下是一个使用矩形简化的示例:-

    <ScrollViewer HorizontalScrollBarVisibility="Disabled">
        <ItemsControl ItemsSource="{StaticResource TestData}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <toolkit:WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <toolkit:LayoutTransformer RenderTransformOrigin="0.5, 0.5" Margin="5">
                        <toolkit:LayoutTransformer.LayoutTransform  >
                            <RotateTransform Angle="0" />
                        </toolkit:LayoutTransformer.LayoutTransform>
                        <Rectangle Width="100" Height="150" Fill="Blue" MouseLeftButtonUp="Rectangle_MouseLeftButtonUp"  />
                    </toolkit:LayoutTransformer>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
我的
TestData
items源是一个任意的
列表
,列表中的内容实际上并不重要,只是它包含一些项

将ScrollViewer用作动态剪辑区域

请注意,在
ScrollViewer
中放置一个WrapPanel是正常的,它会自然地剪辑其内容

也许你真的想剪辑包装纸,你不想任何滚动。显然,您可以应用
RectangleGeometry
Clip
属性,但必须确保剪辑矩形始终与
WrapPanel
的实际大小匹配。您可以通过监视它的
SizeChanged
事件并使用一些代码来实现这一点


另一种方法是将其放入滚动查看器中,然后禁用两个滚动条。

只需添加到上面的AnthonyWJones答案,这是完全正确的,您需要在布局过程中旋转,而不是渲染。Silverlight面板不会剪裁其内容,为了执行剪裁,必须手动将其“剪裁”属性设置为所需的几何体

以下博客文章提供了一个附加行为,该行为将自动剪裁面板的边界:

只需按如下方式设置属性:

    <Canvas util:Clip.ToBounds="true"
            Grid.Column="1"  Background="Aqua" Margin="20" >
        <Ellipse Fill="Red" Canvas.Top="-10"
                 Canvas.Left="-10" Width="130" Height="130"/>
    </Canvas>


我也在寻找高度和宽度的测量,比如说,如果我有高度600和宽度600,那么它将给我600*600的空间,我可以如何测量。面板中的所有图像大小都相同吗?+1回答很好,另外,为了简化剪辑,请参见下面我的补充答案。亲爱的AnthonyWJones,我有一个用户控件,这个用户控件我将作为图像添加到wrappanel中。选择图像,然后单击垂直和水平按钮,此时它将显示。那么我该如何实现它。@Jitendra:我不确定你希望我描述如何实现其中的多少。我也不确定“垂直”和“水平”这两个词是如何应用于旋转的,你确定你的意思不是顺时针和逆时针旋转吗?您可以像在我的示例中一样使用
MouseLeftButtonUp
,但是您可以简单地将
LayoutTransformer
存储在一个字段中,而不是旋转。然后单击按钮可以根据需要修改字段的
layoututtransform
属性。
    <Canvas util:Clip.ToBounds="true"
            Grid.Column="1"  Background="Aqua" Margin="20" >
        <Ellipse Fill="Red" Canvas.Top="-10"
                 Canvas.Left="-10" Width="130" Height="130"/>
    </Canvas>