XAML:做一个ScrollViewer中显示滚动条时,子对象的ScaleTransform变大
-
25-09-2019 - |
题
我想提出一种在我的Silverlight 3应用程序的一些文档“打印预览”控制的。我有一个画布(为示出文档)一的ScrollViewer的内部,并且我有放大/缩小控制的X和ScaleTransform用于Canvas.RenderTransform属性的Y轴刻度属性的按钮。我想的ScrollViewer的滚动条显示,当我足够使得画布上不再显示在ScrollViewer中区“放大”,但似乎他们只出现取决于宽度画布本身的/高度,无论它是否被放大或不
谁能帮助?
解决方案
是的,问题是,有在Silverlight没有LayoutTransform
。有一些解决方法来列出 rel="noreferrer">这里这个问题。
这里的想法是提供一种被调整大小,其结果,调整大小的可滚动区域的中间画布。例如,如果我有以下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>
您会发现,我把<Canvas x:Name="sizer"/>
和<ScrollViewer/>
和<Rectangle/>
在ScaleRect
click事件之间的<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
不隶属于 StackOverflow