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