WPF缩放问题

时间:2010-08-19 17:31:30

标签: wpf xaml

我对使用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>

2 个答案:

答案 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>