Попытка повернуть текст для группы - PullRequest
0 голосов
/ 28 мая 2009

Я пытаюсь создать подобный групповой элемент элемент в XAML (для приложения Silverlight 2), но с изюминкой.

Обычно групповое поле состоит из рамки, в которой основное содержимое размещается внутри границы, а содержимое заголовка - над самой границей.

То, что я пытаюсь сделать, это поместить текст заголовка за левую границу, повернуть на 270 градусов и выровнять по верху. Но мой мозг болит от попыток выяснить поворотное преобразование.

Вот мой ControlTemplate для существующего Groupbox, который я хотел бы изменить:

<ControlTemplate TargetType="Controls1:GroupBox">
  <Grid Background="{TemplateBinding Background}">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border BorderThickness="{TemplateBinding BorderThickness}" Grid.Row="1" Grid.RowSpan="2" 
            BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3">
      <Border.Clip>
        <GeometryGroup FillRule="EvenOdd">
          <RectangleGeometry x:Name="FullRect" Rect="0,0,300,200"/>
          <RectangleGeometry x:Name="HeaderRect" Rect="6,0,100,100"/>
        </GeometryGroup>
      </Border.Clip>
    </Border>
    <ContentPresenter Grid.Row="2" ContentTemplate="{TemplateBinding ContentTemplate}" 
                      Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}"/>
    <ContentControl x:Name="HeaderContainer" Margin="6,0,0,0" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Left" IsEnabled="False" >
      <ContentPresenter Margin="3,0,3,0" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" />
    </ContentControl>
  </Grid>
</ControlTemplate>

Любая помощь высоко ценится!

1 Ответ

2 голосов
/ 28 мая 2009

Самый простой способ - использовать RenderTransform. Для примера:

<TextBlock Background="Red" Width="100" Height="50">
    <TextBlock.RenderTransform>
        <RotateTransform Angle="270"></RotateTransform>
    </TextBlock.RenderTransform>
    My title!
</TextBlock>

Вы также можете указать центр вращения с помощью свойств CenterX и CenterY

Надеюсь, это поможет!

EDIT

Чтобы отрегулировать положение ярлыка, вы можете использовать Canvas следующим образом:

<Canvas Margin="0,45,0,-45">
    <Canvas.RenderTransform>
        <RotateTransform  Angle="270"></RotateTransform>
    </Canvas.RenderTransform>
    <TextBlock Background="Red">
        My title!
    </TextBlock>
</Canvas>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...