none
wpf界面透视问题? RRS feed

  • 问题

  • 使用Visual 2010开发,wpf客户端程序

    为什么有的时候界面会出现这样的情况,透视到了后面一层去呢?

    如果拉伸一下界面,或移动界面,这种情况又不会再出现。

    这个问题在个别的开发的win7电脑上同样存在,个别的xp下也存在。

     

    有人说是Visual  2010的BUG,换成VS2012,仍然存在同样的情况。请专家能帮忙解释。

    谢谢

    2014年2月7日 3:44

答案

  • 你好。上面的问题我已经解决。暂时看不到问题的发生了。

    本来想发界面的截图。无奈论坛不允许发图。

    解决的办法如下:

    首先怀疑是VS2010的BUG。这个是CSDN有人提出。但安装后问题依旧。
    然后分析程序时,发现问题是在自定义控件样式里,比如textBox样式里,我为了鼠标IsMouseOver时,边框有发光效果。
    使用了如下代码:

    默认时的效果

     <Border Margin="1" x:Name="Bd" Background="White" CornerRadius="2">
          <Border.Effect>
                    <DropShadowEffect BlurRadius="6" Color="Transparent" Direction="0" ShadowDepth="0" RenderingBias="Performance"/>
            </Border.Effect>
    </Border>

    然后在触发器里使用了

     <Trigger Property="IsMouseOver" Value="true">
          <Setter Property="Effect" TargetName="Bd">
               <Setter.Value>
                     <DropShadowEffect BlurRadius="6" Color="#FFB4D7EA" Direction="0" ShadowDepth="0" RenderingBias="Performance"/>
              </Setter.Value>
        </Setter>
    </Trigger>

    比如CheckBox,comboBox样式里都有这些代码,我把这些默认时的Effect代码去除后,问题解决。

    在有些界面上,左边有个工具栏,在界面上也有Effect阴影效果,居然这端代码却影响到右边出现透视的问题。

            <Border x:Name="MapToolBar" Margin="0,0,0,0" Height="29" Opacity="0.91" BorderThickness="0,1,0,1" BorderBrush="#FF3491B4" SnapsToDevicePixels="True" VerticalAlignment="Top">
                <Border.Effect>
                    <DropShadowEffect Direction="270" Opacity="0.245" ShadowDepth="4"/>
                </Border.Effect>

    去除<Border.Effect>阴影效果代码后,问题解决。

    经大量测试,问题均不再出现。由此判断是Effect效果造成的问题。

    网上查了相关资料,Effect效果它会占用很多cpu时间, 而显得效率低下,而且会大量占用内存。估计是显卡对Effect的支持不够,造成的。

    具体截图可以看CSDN我发的帖子

    http://bbs.csdn.net/topics/390695860

    2014年2月10日 1:43

全部回复

  • 你好,

    对于你提到的这个问题,我进行了一些调查,在我们内部的Feedback系统上没有发现类似的反馈。这里是我的一些想法和建议。因为这个问题只出现在个别的电脑上,还有个别的控件上。我想我们这样来处理,首先建议你升级VS到最新的版本,Visual Studio 2012目前最新的时Update 4. 可以通过 工具 -> 扩展和更新 -> 更新 查找到VS最新的升级包。另外我测试这个问题可能与个别的系统主题有关。建议先采用升级VS的方式。如果这样不能帮助你解决这个问题。建议提供下出现这个问题的具体软件版本,操作系统版本。最好能附上电脑的配置,如显卡等。另外附上这个问题的截图,这样便于我们分析问题。

    希望我的回复能够帮助你。

    谢谢!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年2月8日 12:13
    版主
  • 你好。上面的问题我已经解决。暂时看不到问题的发生了。

    本来想发界面的截图。无奈论坛不允许发图。

    解决的办法如下:

    首先怀疑是VS2010的BUG。这个是CSDN有人提出。但安装后问题依旧。
    然后分析程序时,发现问题是在自定义控件样式里,比如textBox样式里,我为了鼠标IsMouseOver时,边框有发光效果。
    使用了如下代码:

    默认时的效果

     <Border Margin="1" x:Name="Bd" Background="White" CornerRadius="2">
          <Border.Effect>
                    <DropShadowEffect BlurRadius="6" Color="Transparent" Direction="0" ShadowDepth="0" RenderingBias="Performance"/>
            </Border.Effect>
    </Border>

    然后在触发器里使用了

     <Trigger Property="IsMouseOver" Value="true">
          <Setter Property="Effect" TargetName="Bd">
               <Setter.Value>
                     <DropShadowEffect BlurRadius="6" Color="#FFB4D7EA" Direction="0" ShadowDepth="0" RenderingBias="Performance"/>
              </Setter.Value>
        </Setter>
    </Trigger>

    比如CheckBox,comboBox样式里都有这些代码,我把这些默认时的Effect代码去除后,问题解决。

    在有些界面上,左边有个工具栏,在界面上也有Effect阴影效果,居然这端代码却影响到右边出现透视的问题。

            <Border x:Name="MapToolBar" Margin="0,0,0,0" Height="29" Opacity="0.91" BorderThickness="0,1,0,1" BorderBrush="#FF3491B4" SnapsToDevicePixels="True" VerticalAlignment="Top">
                <Border.Effect>
                    <DropShadowEffect Direction="270" Opacity="0.245" ShadowDepth="4"/>
                </Border.Effect>

    去除<Border.Effect>阴影效果代码后,问题解决。

    经大量测试,问题均不再出现。由此判断是Effect效果造成的问题。

    网上查了相关资料,Effect效果它会占用很多cpu时间, 而显得效率低下,而且会大量占用内存。估计是显卡对Effect的支持不够,造成的。

    具体截图可以看CSDN我发的帖子

    http://bbs.csdn.net/topics/390695860

    2014年2月10日 1:43