0

看起来子 silverlight 控件的宽度总是被容器的宽度剪裁。即使子控件旋转。

XAML 的第一个“块”将呈现一个对于堆栈面板来说太大并且被剪裁的 Button,这是有道理的。

<StackPanel Width="20">
    <Button Width="100" Content="Foo" />
</StackPanel>

第二个 XAML 块将按钮旋转 90 度。我希望看到完整的按钮,因为它现在是垂直的。

<StackPanel Width="20">
    <Button Width="100" Content="Foo" >
        <Button.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform Angle="90"/>
            <TranslateTransform/>
        </TransformGroup>
            </Button.RenderTransform>
    </Button>
</StackPanel>

在 XAML 的第二块中,似乎按钮被剪裁在同一点,如果它是水平的,我希望看到完整的按钮。

这显然是标准行为,但有没有办法解决这个问题?

4

3 回答 3

4

如果垂直 StackPanel 中的元素比 StackPanel 的宽度宽,它将被剪裁到 StackPanel 的宽度。如果你删除你的 TransformGroup 你会看到你得到了相同的剪辑,只是没有旋转。裁剪发生在旋转之前,所以即使你让它足够高以显示结果,它仍然会被裁剪,因为旋转之前的容器不够大。解决这个问题的一种方法是在两者之间插入一个 Canvas,因为 Canvas 元素没有被剪裁,所以它应该按预期工作。不产生其他副作用的最佳方法是使 Canvas 与其包含的元素大小相同,否则您可能会从 StackPanel 获得奇怪的大小调整行为。

所以你的代码看起来像这样:

   <StackPanel Width="20">
        <Canvas Width="100" Height="20">                
            <Button Width="100" Content="Foo" >
                <Button.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform/>
                        <SkewTransform/>
                        <RotateTransform Angle="90"/>
                        <TranslateTransform/>
                    </TransformGroup>
                </Button.RenderTransform>
            </Button>
        </Canvas>
    </StackPanel>
于 2009-02-05T02:30:44.813 回答
2

也许检查您的 RenderTransformOrigin 值是否正确?

通常,如果您只想将元素旋转 90°,您可以将 RenderTransformOrigin 设置为 0.5,0.5。

这将导致旋转以按钮为中心发生,即按钮中心的位置不会改变。

代码中指定的 .0,1 的 RenderTransformOrigin 将使 Button 围绕一个圆的圆周旋转,该圆的中心是 Button 的左下角。这意味着按钮的中心将会改变。

于 2009-02-04T23:12:53.810 回答
0

而不是使用Button.RenderTransform,你应该使用Button.LayoutTransform。有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/ms750596.aspx

于 2010-12-30T09:48:41.637 回答