我对使用ScaleTransform遇到的问题感到困惑。我有一个固定宽度和高度的网格。网格包含一个子项,一个矩形。 Rectangle的Fill是一个VisualBrush,它的Visual绑定到网格外部的画布,其尺寸相当大。在矩形上,我使用ScaleTransform,ScaleX和ScaleY都设置为0.18。基本上,我试图将Rectangle的视觉缩小到适合我的网格。似乎正在发生的事情是网格本身正在缩小,导致比我想要的结果小得多。我已经包含了以下代码。正如一个参考点,矩形所绑定的高度和宽度分别基本上是900乘600。任何关于我可能做错的指示都将非常感激。
<Grid Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content">
<Rectangle Height="{Binding Path=ActualHeight}" Width="{Binding Path=ActualWidth}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle.Fill>
<VisualBrush Visual="{Binding}"/>
</Rectangle.Fill>
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
答案 0 :(得分:0)
你可以发布Canvas元素的XAML吗?我尝试了以下内容,我得到了你想要的行为(矩形被缩放,网格大小正确)
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid ShowGridLines="True" Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content">
<Rectangle Height="{Binding Path=ActualHeight}" Width="{Binding Path=ActualWidth}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=theCanvas}"/>
</Rectangle.Fill>
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
<Canvas x:Name="theCanvas" Grid.Row="1">
<Rectangle Fill="Brown" Height="300" Width="300" />
</Canvas>
</Grid>
答案 1 :(得分:0)
什么是ActualWidth和ActualHeight?除非我误解了它在WPF 中通常意味着的ActualHeight和ActualWidth属性不是DP,你不能绑定它们。如下所述,这些是只读依赖属性。假设这是一个CustomControl样式,首先应该将Binding更改为TemplateBinding。
我删除了绑定并基本上创建了XAML的静态版本,看起来很好。既然您为网格定义了Part_Content,我很好奇,这是自定义控件样式的xaml部分吗? CustomControl的代码是否通过PART_Content操作网格?
<Grid Height="225" Width="200" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="PART_Content" Background="Red">
<Rectangle Height="225"
Width="200"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Fill="Blue">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="0.183" ScaleY="0.183"/>
</Rectangle.RenderTransform>
</Rectangle>
</Grid>