skb*_*skb 6 silverlight xaml scrollviewer silverlight-3.0 scaletransform
我正在为Silverlight 3应用程序中的某些文档进行一种"打印预览"控件.我在ScrollViewer中有一个Canvas(用于显示文档),我有放大/缩小按钮,用于控制Canvas.RenderTransform属性的ScaleTransform的X和Y Scale属性.我希望ScrollViewer的滚动条在我"放大"时显示,以便画布在ScrollViewer区域中不再可见,但似乎它们只显示取决于画布本身的宽度/高度,无论如何是否放大.
有人可以帮忙吗?
是的,问题是LayoutTransformSilverlight中没有.有一些变通上市这个问题在这里.
这里的想法是提供一个调整大小的中间画布,从而调整可滚动区域的大小.例如,如果我有以下XAML:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="25" />
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" x:Name="sc" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto" Width="200" Height="200" >
<Canvas x:Name="sizer" Width="200" Height="200">
<Rectangle x:Name="gradientRect" Width="200" Height="200">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1"/>
</Rectangle.RenderTransform>
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Red" Offset="0.1"/>
<GradientStop Color="Yellow" Offset="0.5"/>
<GradientStop Color="Red" Offset="0.9"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Canvas>
</ScrollViewer>
<Button Grid.Row="1" Content="Multiply by Two" Click="ScaleRect" Width="100" Height="25"></Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
你会发现,我把<Canvas x:Name="sizer"/>之间<ScrollViewer/>以及<Rectangle/>和点击事件ScaleRect中<Button/>.
所述ScaleRect子简单地通过2.缩放矩形该值然后被用来改变sizer Width和Height,从而更新的ScrollViewer的滚动条.这是子的ScaleRect:
Private Sub ScaleRect(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim zoom As Double = 2.0
Dim scaleX = gradientRect.RenderTransform.GetValue(ScaleTransform.ScaleXProperty)
Dim scaleY = gradientRect.RenderTransform.GetValue(ScaleTransform.ScaleYProperty)
gradientRect.RenderTransform.SetValue(ScaleTransform.ScaleXProperty, scaleX * zoom)
gradientRect.RenderTransform.SetValue(ScaleTransform.ScaleYProperty, scaleY * zoom)
sizer.Height *= zoom
sizer.Width *= zoom
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7890 次 |
| 最近记录: |