显示非矩形TextBlock

时间:2011-08-26 13:15:34

标签: wpf silverlight xaml wpf-controls textblock

我想在三角形区域显示文字。但我无法弄清楚如何更改TextBlock的形状,以便文本显示在三角形区域而不是常规矩形区域。

以下是我的UserControl的简化代码:

<Grid >
    <Image Height="100" Width="100" />   <!-- Some triangular image -->
    <TextBlock Height="100" Width="100" Text="This text should fill up the triangualr image area"/>
</Grid>

3 个答案:

答案 0 :(得分:1)

那种类似的矫枉过正的解决方案,但如果遵循类似的内容,内部网格的内容将呈三角形排列:

 <Grid>
   <Image Height="200" Width="200" />
   <Grid Width="200">
        <Grid.RowDefinitions>
             <RowDefinition />
             <RowDefinition />
             <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
             <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="1" Text="Line 1" HorizontalAlignment="Center"/>
        <TextBlock Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" Text="This is Line 2." HorizontalAlignment="Center"/>
        <TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="5" Text="This is Line 3. Wud be longest." HorizontalAlignment="Center"/>
   </Grid>
 </Grid>

供您参考,网格构造如下:

Refrence image

设置背景三角形图像&amp;我认为这就足够了。

答案 1 :(得分:0)

您需要覆盖TextBox的模板

我建议您获取Blend的副本,从那里提取TextBox的模板,并根据您的需要进行修改。

如果您无法获得Blend,我建议Show Me The Template,这是一个WPF工具,显示大多数WPF控件的默认模板

答案 2 :(得分:0)

只需覆盖文本框的模板,就像这样

<ControlTemplate TargetType="Textbox">
    <Path ... define your triangle here>               
</ControlTemplate> 

然后将文本框上的enter属性设置为true。也对齐续HOR。和垂直ALG。这样它就会在三角形的中间居中。确保使文本框背景透明,这样就不会覆盖三角形边界。

如果您不想超出界限,请将内容展示者放在视图框中。

您还可以查看剪辑属性。