0

子の Silverlight コントロールの幅は常にコンテナーの幅で切り取られているようです。子コントロールが回転しても。

XAML のこの最初の「チャンク」は、スタック パネルには大きすぎてクリップされたボタンをレンダリングします。これは理にかなっています。

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

XAML のこの 2 番目のチャンクは、ボタンを 90 度回転します。ボタンは垂直になっているので、完全なボタンが表示されると思います。

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

XAML の 2 番目のチャンクでは、ボタンが水平の場合と同じポイントでクリップされているように見えます。完全なボタンが表示されると予想されます。

これは明らかに標準的な動作ですが、これを回避する方法はありますか?

4

3 に答える 3

4

垂直StackPanelの要素がStackPanelの幅よりも広い場合、StackPanelの幅にクリップされます。TransformGroupを削除すると、回転していないだけで、同じクリッピングが発生していることがわかります。クリッピングは回転前に発生するため、結果を表示するのに十分な高さにしても、回転前のコンテナが十分に大きくなかったため、クリップされたままになります。これを回避する1つの方法は、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 は、ボタンの左下隅を中心とする円の円周に沿ってボタンを回転させます。これは、ボタンの中心が変わることを意味します。

于 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 に答える