Pet*_*ter 12 wpf rendering windows-xp windows-7
为什么WPF在Windows XP和Windows 7上呈现不同?
我在两台计算机上都使用.NET SP1 ..
我的布局就像这个窗口没有工具栏,并设置为最大化,因此它适合整个屏幕.
在那之下,我有一个Viewbox设置为使用Stretch:Uniform,在我之下我有我的LayoutRoot.
这样我希望在所有计算机上获得相同的布局,但它似乎在Windows XP上的呈现方式完全不同.有些项目有点小,布局看起来不那么好.
我试图将我的Windows 7计算机上的重新设置更改为与Windows XP计算机相同,并保持其应有的布局.
两台计算机都使用96 DPI.
Sim*_*ver 10
花了大约三个小时才终于解决这个问题 - 经过大量的侦探工作,但现在它完美无缺!
看来,WPF在Windows XP和WPF在Windows 7不仅有不同的默认字体面临以及默认字体大小.
最后我发现我在Windows XP上指定显式大小的字体看起来是相同的,只有我没有指定明确大小的字体才有所不同.
所以这就是我如何修复它MainWindow.xaml- 用a ContentControl来设置默认大小:
<Grid x:Name="LayoutRoot" Background="#FFDEDEDE" UseLayoutRounding="True">
<ContentControl FontFamily="Segoe UI" FontSize="12">
... window contents ...
</ContentControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
注意:如果您正在使用Blend,则可能需要FontSize="12"手动输入.如果从属性设计器中选择它,它将删除它,因为它认为12已经是默认值!
就像我说我的目的地是打印机 - 所以我必须对打印的控件做同样的事情.
我还能在哪里设置这个默认字体大小?无论如何,我现在在Windows XP和Windows 7上具有像素完美渲染,并且它们的区别仅在于明确的抗锯齿差异.
注意:UseLayoutRounding不是我的解决方案的一部分 - 但我也总是在我的根控件上使用它.
小智 6
默认字体不同
制作WPF按钮
<Button x:Name="button" Width="100" Height="25" Content="Button" Click="Button_Click"/>
Run Code Online (Sandbox Code Playgroud)
和代码背后:
private void Button_Click(object sender, RoutedEventArgs e)
{
string msg = string.Format("Number of fonts: {1}{0}Font Family: {2}{0}Font Size: {3}",
Environment.NewLine,
button.FontFamily.FamilyNames.Values.Count.ToString(),
button.FontFamily.FamilyNames.Values.First().ToString(),
button.FontSize.ToString());
MessageBox.Show(msg);
}
Run Code Online (Sandbox Code Playgroud)
在每个操作系统上运行此命令,您将看到XP和Windows7的默认字体不同.
XP的默认字体是"Tahoma"size 11
Windows 7的默认字体是"Segoe UI"大小12
我的经验:
我不确定这是否是问题所在,我注意到 Windows 7 使用硬件加速来绘制 WPF 应用程序。Windows XP 没有。
您可以使用以下方法检查是否属于这种情况:
public partial class App
{
public static int Tier { get { return RenderCapability.Tier >> 16; } }
static App()
{
Console.Out.WriteLine("Render Tier: {0}", Tier);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的渲染层使用完整的硬件加速绘图,则它应该返回 2。0 = 软件,1 = 中间的东西(如果猜测的话)
| 归档时间: |
|
| 查看次数: |
9883 次 |
| 最近记录: |