TextBlockの位置は、xの位置に合わせる必要があります(Orientationが垂直の場合はy)。 私が実装さ:TextBlockを指定された位置に配置するには
TextBlock text = new TextBlock();
// Some code to define text, font, etc. here
// Turn if Orientation is vertical
if (Orientation == Orientation.Vertical)
{
text.RenderTransform = new RotateTransform() { Angle = 270 };
}
// Update, then ActualWidth is set correctly
text.UpdateLayout();
// Position of label centered to given position
double halfWidth = text.ActualWidth/2;
double x1 = (Orientation == Orientation.Horizontal) ? x - halfWidth : x;
double y1 = (Orientation == Orientation.Horizontal) ? y : y + halfWidth;
Canvas.SetLeft(text, x1);
Canvas.SetTop(text, y1);
Children.Add(text); // Add to Canvas
これは、実際の罰金に動作しますが、それはUpdateLayout
せずにこれを行うことが可能です。 UpdateLayout
を削除した場合、ActualWidthは(もちろん)0なので、私が探しているポジションは得られません。
あなたはコンテナとしてグリッドを使用する場合は、それはすぐに集中しているということを知っています?それ以外に、RenderTransformではなくLayoutTransformで試してください – fixagon
親コントロールとは何ですか?このコードのコンテキストは何ですか? – loxxy
@fantasticfixこれはWPFとSilverlightで動作するため、RenderTransformを使用しました。 SLはLayoutTransformを知らない。 – Em1