【问题标题】:WPF - Border & TextBlock - Strange BehaviorWPF - 边框和文本块 - 奇怪的行为
【发布时间】:2015-11-24 15:16:35
【问题描述】:

我有这个非常简单的 XAML 标记

<Grid Margin="20">
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Vertical" Grid.Row="0">
        <TextBlock Text="Hello World" FontSize="20"/>
        <Border BorderBrush="Black" BorderThickness="0.25"/>
    </StackPanel>
    <StackPanel Orientation="Vertical" Grid.Row="1">
        <TextBlock Text="Hello World" FontSize="19" />
        <Border BorderBrush="Black" BorderThickness="0.25"/>
    </StackPanel>
</Grid>

...并且代码隐藏文件中没有代码。

但是结果很奇怪……,第一个stackpanel中的边框在应用运行时变得蓬松,第二个stackpanel中的边框清晰漂亮。

唯一的区别在于两个文本块,第一个文本块的字体大小为 20,第二个文本块的字体大小为 19。

那么是什么触发了第一个边框的蓬松感...?

【问题讨论】:

  • 如果你将第一个文本框的 FontSize 设置为 19?
  • 那么第一个Border就很清晰了。
  • 如果你使用 18 码怎么办?不同的字体呢?当使用字体的“预期”点大小之间的点大小时,我看到了奇怪的字体渲染。这是在标准分辨率显示器上吗?
  • 真的很奇怪的效果它在奇怪的字体大小的情况下工作正常。
  • 我将字体大小更改为 21,问题就消失了。我没有做任何特别的事情,比如改变字体或任何东西,所以是的,我认为这是字体和字体大小的组合。它在我的标准 Microsoft Surface Pro 3 上运行。我会选择另一种字体大小,笑一笑并关闭此线程。非常感谢您的帮助:-)

标签: c# wpf xaml border


【解决方案1】:

在您的网格中尝试 UseLayoutRounding="True"。

https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Windows.FrameworkElement.UseLayoutRounding);k(VS.XamlEditor);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5.2)&rd=true

    <Grid Margin="20" UseLayoutRounding="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="50"/>
            <RowDefinition Height="50"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Vertical" Grid.Row="0">
            <TextBlock Text="Hello World" FontSize="20"/>
            <Border BorderBrush="Black" BorderThickness="0.25"/>
        </StackPanel>
        <StackPanel Orientation="Vertical" Grid.Row="1">
            <TextBlock Text="Hello World" FontSize="19" />
            <Border BorderBrush="Black" BorderThickness="0.25"/>
        </StackPanel>
    </Grid>

【讨论】:

  • 确实,如果我在网格中设置UseLayoutRounding="True",两个边框就会被隐藏。另一方面,如果我在第一个 TextBlock(字体大小为 20 的那个)中设置 UseLayoutRounding="True",“蓬松效果”就会消失(VS 2013,.NET 4.0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多