WPF 设置控件阴影后,引发的Y轴位置变化问题
2021-07-09 07:09
标签:方向 交互 width target local name 微软 没有 public 最近遇到一个动画执行时,文本位置变化的问题。如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素。 貌似有点莫名其妙,因为控件之间并不在同一个Panel布局控件中,不存在高度限制变化引发此类问题。所以有了如下测试 1. 首先新建了一个空项目,前面是一个带阴影的文本,后面用一张普通图片循环变更它的高度。尝试了下,还是会移动Y轴的像素 测试不通过 2. 后面使用用普通的布局控件Grid代替。依然如此 测试不通过 所以此问题不是图片动画造成的。 3. 于是,我再添加个按钮,测试带阴影的非文本控件 测试不通过 只有文本被影响了,按钮不会被影响。是按钮的原因? 4. 那么我们将按钮的边框干掉 按钮还是不会被影响。。。 5. 给按钮设置,被影响文本同样的字体系列。 按钮也被影响了。。。所以,是字体原因!那么,这种字体类型是什么呢? FontFamily="Microsoft YaHei Bold" 6. 我们回到只有文本的测试模式 测试不通过 测试通过 所以,我们可以得出是Y轴位置变化,是字体类型微软雅黑造成的了。 7. 除了微软雅黑和微软雅黑加粗,其它字体类型是否会影响呢? 测试不通过 测试通过 通过如上测试,发现只有微软雅黑UI字体类型才不会有影响。并且在步骤6中,测试通的是没有设置字体类型的,没有设置字体类型,其实默认是 Microsoft YaHei UI。 8. 另,我们将高度变换的区域移动下位置,也不会有影响。 测试通过 9. 再尝试将阴影效果删除,也不会有影响 测试通过 1.添加一个文本/按钮控件 2.此显示控件设置阴影(条件一) 3.此显示控件设置字体类型FontFamily(条件二),如下 4.在此显示控件的显示区域,变更其它控件的高度(条件三)。 完整案例如下: 界面显示: 按照如上重现步骤,有三个条件才会出现此问题。 1.设置了非Microsoft YaHei UI系列的字体 2.设置了阴影效果 3.显示区域有宽高变更 针对这些条件,我们给出规避的解决方案 按照如上有问题的场景,我们得出结论,是因为字体类型设置导致的。 所以,我们如果不设置字体类型FontFamily,改其它字体类型为Microsoft YaHei UI/Microsoft YaHei UI Light, 如果需要加粗,可以通过设置FontWeight加粗: 测试OK 按照如上测试,将高度变换的区域移动,或者不设置阴影效果,也不会有此文所未Y方向位置变化的问题。 注:如上规避措施只是临时解决方案,如小伙伴们有其它方案或者发现其它根本原因,可以联系我~谢谢 WPF 设置控件阴影后,引发的Y轴位置变化问题 标签:方向 交互 width target local name 微软 没有 public 原文地址:https://www.cnblogs.com/lonelyxmas/p/9716415.html背景
测试场景
重现步骤
1 TextBlock x:Name="TestTextBlock1" VerticalAlignment="Center" HorizontalAlignment="Center"
2 Text="微软雅黑加粗" Foreground="White" LineHeight="18" FontSize="60" FontFamily="Microsoft YaHei Bold">
3 TextBlock.Effect>
4 DropShadowEffect Color="#000000" BlurRadius="4" ShadowDepth="2" Opacity="0.24"/>
5 TextBlock.Effect>
6 TextBlock>
1 Window x:Class="TextBlockShadowEffectForStoryBoardDemo.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:TextBlockShadowEffectForStoryBoardDemo"
7 mc:Ignorable="d" Title="MainWindow" Height="600" Width="800" Background="LightGray">
8 Window.Resources>
9 Storyboard x:Key="Storyboard.ChangeHeight" DesiredFrameRate="20">
10 DoubleAnimationUsingKeyFrames Storyboard.TargetName="StoryControl" Storyboard.TargetProperty="Height" RepeatBehavior="Forever">
11 EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />
12 EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="15" />
13 EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="30" />
14 EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="30" />
15 EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="15" />
16 EasingDoubleKeyFrame KeyTime="0:0:1.0" Value="0" />
17 EasingDoubleKeyFrame KeyTime="0:0:2" Value="0" />
18 DoubleAnimationUsingKeyFrames>
19 Storyboard>
20 Window.Resources>
21 Grid>
22 Border VerticalAlignment="Center" BorderBrush="Red" BorderThickness="0 1 0 0">Border>
23
24 Grid HorizontalAlignment="Center" VerticalAlignment="Center" Height="80" Width="60" Margin="0 60 0 0">
25 Grid x:Name="StoryControl" Background="Red"
26 Height="30" Width="30" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5"/>
27 Grid>
28 TextBlock x:Name="TestTextBlock1" VerticalAlignment="Center" HorizontalAlignment="Center"
29 Text="微软雅黑加粗" Foreground="White" LineHeight="18" FontSize="60" FontFamily="Microsoft YaHei Bold">
30 TextBlock.Effect>
31 DropShadowEffect Color="#000000" BlurRadius="4" ShadowDepth="2" Opacity="0.24"/>
32 TextBlock.Effect>
33 TextBlock>
34 Grid>
35 Window>
1 ///
解决方案
推荐解决方案(规避措施):
其它解决方案(规避措施):
下一篇:cygwin安装方法