代码之家  ›  专栏  ›  技术社区  ›  Craig Shearer

尝试旋转分组框的文本

  •  0
  • Craig Shearer  · 技术社区  · 17 年前

    我正在尝试在XAML中创建一个类似groupbox的元素(对于Silverlight 2应用程序),但有一个扭曲。

    通常,groupbox由边框组成,主要内容放在边框内,而头内容放在边框上。

    我要做的是将标题文本放在左侧边框上,旋转270度并在顶部对齐。但是我的大脑因为试图找出旋转变换而受伤。

    这是我对现有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 回复  |  直到 17 年前
        1
  •  2
  •   Eduardo Cobuci    17 年前

    最简单的方法是使用RenderTransform。例如:

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

    也可以使用“中心X”和“中心Y”特性指定旋转中心

    希望这有帮助!

    编辑

    要调整标签位置,可以使用如下画布:

    <Canvas Margin="0,45,0,-45">
        <Canvas.RenderTransform>
            <RotateTransform  Angle="270"></RotateTransform>
        </Canvas.RenderTransform>
        <TextBlock Background="Red">
            My title!
        </TextBlock>
    </Canvas>
    
    推荐文章