Silverlight 视图不';t展开以适应缩放的边框

Silverlight 视图不';t展开以适应缩放的边框,silverlight,layout,rendertransform,Silverlight,Layout,Rendertransform,我在一个网格内有一个边框,它显示在一个窗口中。我需要使边界更大,所以我对其应用了RenderTransform。但是,ChildWindow尚未展开以适应缩放的边框。看起来大小是在应用渲染变换之前计算的。这意味着边界现在被裁剪,我只能看到它的1/4 我尝试过在ScrollViewer和ViewBox中包装边框,这两种方法都不起作用 <Grid> ... <Border x:Name="Border" Grid.Row="3"

我在一个网格内有一个边框,它显示在一个窗口中。我需要使边界更大,所以我对其应用了RenderTransform。但是,ChildWindow尚未展开以适应缩放的边框。看起来大小是在应用渲染变换之前计算的。这意味着边界现在被裁剪,我只能看到它的1/4

我尝试过在ScrollViewer和ViewBox中包装边框,这两种方法都不起作用

<Grid>
    ...
    <Border x:Name="Border"
            Grid.Row="3"
            Grid.ColumnSpan="2"
            Background="White"
            BorderBrush="Black"
            BorderThickness="1"
            CornerRadius="5"
            VerticalAlignment="Top"
            Height="{Binding NewLabelTemplate.Height}"
            Width="{Binding NewLabelTemplate.Width}">
        <Border.RenderTransform>
            <ScaleTransform CenterX="0.5"
                            CenterY="0.5"
                            ScaleX="2"
                            ScaleY="2"/>
        </Border.RenderTransform>
        ...
    </Border>
    ...
</Grid>

...
...
...
如何让ChildWindow在计算其大小时使用边界的最终大小


我不能将缩放应用于子窗口,也不能直接使用渲染的边框高度和宽度,因为网格中还有其他我不想缩放的元素。

目前,我可以想出两种可能的解决方案:

1。计算要绑定到的边框的缩放特性

<Grid>
    <Grid.Resources>
        <ScaledSizeProperties x:Key="BorderSizes"
            ScaleFactor="2"
            BorderThickness="1"
            CornerRadius="5"
            Height="{Binding NewLabelTemplate.Height}"
            Width="{Binding NewLabelTemplate.Width}"/>
    </Grid.Resources>
    ...
    <Border x:Name="Border"
        Grid.Row="3"
        Grid.ColumnSpan="2"
        Background="White"
        BorderBrush="Black"
        VerticalAlignment="Top"
        BorderThickness="{Binding
            Path=ScaledBorderThickness, Source={StaticResource BorderSizes}}"
        CornerRadius="{Binding
            Path=ScaledCornerRadius, Source={StaticResource BorderSizes}}"
        Height="{Binding
            Path=ScaledHeight, Source={StaticResource BorderSizes}}"
        Width="{Binding
            Path=ScaledWidth, Source={StaticResource BorderSizes}}">
        ...
    </Border>
    ...
</Grid>
2。使用LayoutTransformer而不是RenderTransform

该工具包的一部分现在(自SL5以来)是Silverlight基本库包的正式部分

<Grid>
...
<LayoutTransformer
    Grid.Row="3"
    Grid.ColumnSpan="2"
    VerticalAlignment="Top">
    <LayoutTransformer.LayoutTransform>
        <ScaleTransform CenterX="0.5"
                        CenterY="0.5"
                        ScaleX="2"
                        ScaleY="2"/>
    </LayoutTransformer.LayoutTransform>
    <Border x:Name="Border"
        Background="White"
        BorderBrush="Black"
        BorderThickness="1"
        CornerRadius="5"
        Height="{Binding NewLabelTemplate.Height}"
        Width="{Binding NewLabelTemplate.Width}">
        ...
    </Border>
</LayoutTransformer>
...
</Grid>

...
...
...

通常,您希望家长为其子女口述这些内容,而不是相反。为什么不直接将您的高度/宽度应用于儿童窗口?@ChrisW。因为边框只是子窗口中的一个元素,我不想缩放其他元素。这就是为什么你不想在缩放会与任何东西的大小交互的伪装下使用缩放,更不用说父窗口了。不幸的是,缩放不是那样工作的。无论哪种方式,父对象都将设置显示缩放的面板边界。所以你必须为它提供空间,不管朋友。
<Grid>
...
<LayoutTransformer
    Grid.Row="3"
    Grid.ColumnSpan="2"
    VerticalAlignment="Top">
    <LayoutTransformer.LayoutTransform>
        <ScaleTransform CenterX="0.5"
                        CenterY="0.5"
                        ScaleX="2"
                        ScaleY="2"/>
    </LayoutTransformer.LayoutTransform>
    <Border x:Name="Border"
        Background="White"
        BorderBrush="Black"
        BorderThickness="1"
        CornerRadius="5"
        Height="{Binding NewLabelTemplate.Height}"
        Width="{Binding NewLabelTemplate.Width}">
        ...
    </Border>
</LayoutTransformer>
...
</Grid>