【问题标题】:How to set FontSize of a Textblock, which is in a Viewbox如何设置文本块的字体大小,它位于视图框中
【发布时间】:2011-01-05 13:42:18
【问题描述】:

我无法在TextBlock 中设置TextFontSize,因为TextBoxViewbox 中。为什么?

<Grid Margin="35,30,35,0" ShowGridLines="False" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="270 px" Width="2*"/>
        <ColumnDefinition Width="5*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition  />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Border Grid.Row="0" Grid.Column="0" BorderBrush="Black" BorderThickness="1,1,1,0" />
    <Viewbox>
        <TextBlock  Margin="10,5,0,5" Grid.Row="0" Grid.Column="0">Team:</TextBlock>
    </Viewbox>
    <Border Grid.Row="1" Grid.Column="0" BorderBrush="Black" BorderThickness="1,1,1,0" />
    <TextBlock Margin="10,5,0,5" Grid.Row="1" Grid.Column="0">Beschreibung:</TextBlock>
    <Border Grid.Row="2" Grid.Column="0" BorderBrush="Black" BorderThickness="1,1,1,0" />
    <TextBlock Margin="10,5,0,5" Grid.Row="2" Grid.Column="0">Milestone:</TextBlock>
    <Border Grid.Row="3" Grid.Column="0" BorderBrush="Black" BorderThickness="1,1,1,1" />
    <TextBlock Margin="10,5,0,5" Grid.Row="3" Grid.Column="0">Status:</TextBlock>
    <Border Grid.Row="0" Grid.Column="1" BorderBrush="Black" BorderThickness="0,1,1,0" />
    <TextBlock x:Name="tb_Team_dyn" Margin="10,5,0,5"  Grid.Row="0" Grid.Column="1"
               FontWeight="Bold" Text="{Binding Data.Team}" TextWrapping="Wrap"></TextBlock>
    <Border Grid.Row="1" Grid.Column="1" BorderBrush="Black" BorderThickness="0,1,1,0" />
    <TextBlock x:Name="tb_Descr_dyn" Margin="10,5,0,5" Grid.Row="1" Grid.Column="1"
               FontWeight="Bold" Text="{Binding Data.Description}" TextWrapping="Wrap"/>
    <Border Grid.Row="2" Grid.Column="1" BorderBrush="Black" BorderThickness="0,1,1,0" />
    <TextBlock x:Name="tb_Milestone_dyn" Margin="10,5,0,5" Grid.Row="2" Grid.Column="1"
               FontWeight="Bold" Text="{Binding Data.Milestone}" TextWrapping="Wrap"/>
    <Border Grid.Row="3" Grid.Column="1" BorderBrush="Black" BorderThickness="0,1,1,1" />
    <StackPanel Margin="10,5,0,5" Grid.Row="3" Grid.Column="1" Orientation="Horizontal">
        <Image  x:Name="imgSmile" MaxWidth="38" Source="{Binding Data.Smiley}" />
        <TextBlock x:Name="tb_Status_dyn" Margin="{Binding Data.SmileyMargin}"
                   Foreground="{Binding Data.Col}" FontWeight="Bold"
                   Text="{Binding Data.Status}" TextWrapping="Wrap"></TextBlock>
    </StackPanel>
</Grid>

我可以设置所有TextBlocks 的FontSizes,但不能设置Viewbox 中的TextBlock

【问题讨论】:

  • viewbox 的目的是拉伸它的内容......所以如果你不希望文本块中的文本大小被拉伸,为什么要使用 viewbox?
  • 我想拉伸文本块的大小.. 但我不能设置“开始”字体大小。我的窗口开始最大化,所以字体很大..但字体大小应该更小..但我不能设置它..
  • 我仍然不清楚您要完成什么 - 您希望文本块在不拉伸文本的情况下拉伸?这不可能。如果您想要一个静态大小的字符串(具有静态字体)放置在一个可拉伸的区域中,请尝试一个包含统一网格的视图框,具有 1x1 单元格,其中包含文本块。可能还有许多其他的布局可能性会起作用。通常,我将 DockPanels 与 LastChildFill=True 组合用于类似的事情。
  • 我认为 Viewbox 对我很有帮助。我想要拉伸文本。拉伸有效。但现在我的问题是:使用 FontSize="16" 设置 TextBlock 的字体大小无效。我的窗口开始最大化。所以字体大约是48px。但是字体应该是,当窗口最大化 16px 而不是 48px 时。而且我不知道如何设置,因为就像已经说过的,FontSize="16" 是无效的。

标签: wpf vb.net wpf-controls textblock font-size


【解决方案1】:

一些示例代码会有所帮助。在我的脑海中......文本框是否设置为多行?如果不是,内部文本可能会与文本框一起拉伸。

【讨论】:

    【解决方案2】:

    请记住,FontSize 设置文本的实际大小,但 Viewbox 会在文本布局和呈现后对其进行缩放。如果将具有固定宽度和高度的元素放置在 Viewbox 中,您将看到相同的效果。 Viewbox 本身不会更改 Width、Height 或 FontSize 属性,但最终呈现效果会有所不同。

    您实际上正在寻找的是 Viewbox 本身的初始布局,它将使其初始大小等于 TextBlock 的大小,这将有效地将 Viewbox 的缩放比例设置为 1:1。您可以根据您的应用程序以多种方式实现此目的(直接在代码中,与 ValueConverters 的绑定等),但基本方法是测量父元素的初始大小并设置适当的边距以缩小视图框内的分配给它的布局区域。这将允许 Viewbox 与父级一起更改大小,因为它保持您设置的边距。还要查看 Viewbox 上的 StretchDirection、MinHeight 和 MinWidth。

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 2013-10-08
      • 2013-04-01
      • 2013-08-05
      • 1970-01-01
      • 2012-10-11
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多