zoukankan      html  css  js  c++  java
  • [WPF]RadioButton在Group的Header区部分不响应鼠标选择的bug分析

    昨晚看到南柯之石的WPF BUG之四:点击RadioButton的空白没有反应,就做了简单的验证,之后发表了一些分析和看法,

    但是那个分析不够准确和充分,会误导别人的想法。在此表示歉意。这里我会从头做分析。

    由于南柯之石已经描述过bug,这里只是简单说一下:就是在GroupBox的Header上放一个RadioButton,此时鼠标点击RadioButton的某些空白区域没有反应。

    下面言归正传,开始对这个bug的探索:

    首先这里给出出现bug的xaml片段(这个从南柯之石的blog转帖过来的,我做了部分修改,方便重现bug):

    BUG in XAML
        <Grid Margin="12" TextBlock.FontSize="36">
            
    <Grid.RowDefinitions>
                
    <RowDefinition Height="1*" />
                
    <RowDefinition Height="5*" />
                
    <RowDefinition Height="4*" />
            
    </Grid.RowDefinitions>
            
    <TextBlock Margin="0,0,0,5" TextWrapping="Wrap">
                
    <Run FontWeight="Bold">Bug Description:</Run>
            
    </TextBlock>
            
    <Border x:Name="dummyContainer" BorderBrush="Red" BorderThickness="1" Grid.Row="1">
                
    <GroupBox x:Name="targetGroupBox" Padding="9" BorderBrush="CadetBlue" BorderThickness="10" Background="Red">
                    
    <GroupBox.Header>
                        
    <RadioButton x:Name="targetRadioButton" Content="Header RadioButton" GroupName="header"/>
                    
    </GroupBox.Header>
                    
    <GroupBox.Content>
                        
    <StackPanel>
                            
    <RadioButton Content="Common RadioButton"/>
                            
    <RadioButton Content="Common RadioButton"/>
                        
    </StackPanel>
                    
    </GroupBox.Content>
                
    </GroupBox>
            
    </Border>

            
    <GroupBox Padding="9" Grid.Row="2">
                
    <GroupBox.Header>
                    
    <RadioButton Content="Header RadioButton" GroupName="header"/>
                
    </GroupBox.Header>
                
    <GroupBox.Content>
                    
    <StackPanel>
                        
    <RadioButton Content="Common RadioButton"/>
                        
    <RadioButton Content="Common RadioButton"/>
                    
    </StackPanel>
                
    </GroupBox.Content>
            
    </GroupBox>
        
    </Grid>

    这里鼠标Click或者Hover GroupBox的Header区域上的RadioButton的某些地方,你会发现没有任何响应。在WPF中,UI出的问题,很多都是VisualTree上的,所以我拿XAMLPad看了看这个片段生成的VisualTree,如下图:
    RadioButton Bug

     在这个图上,我标记了两个地方:
    1、我为targetRadioButton的VisualTree里藏着的Border区域做了标记(采用黄色覆盖,然后和背景色的反色)在这个反色区域,鼠标都是不响应的。
    2、在VisualTree上,我标记除了那个在targetRadioButton里隐藏的Border,下面的属性浏览器可以看到他的属性:背景是透明的,白色边框刷子,边框宽度每个边为10,圆角半径是4……

    通过这个图,还有GroupBox的Theme样式可以得知,这个Border是在最上面的,界面不可见,但消息却不是透明,当鼠标响应在这些区域,消息就不会到达后面的RadioButton和其他控件了。

    有兴趣的朋友可以自己试试看。

    结论:

    1、这个实际是GroupBox的bug,实际测试在这样的区域了,放置的UI都有问题。
    2、在WPF下,很多的bug看起来很隐蔽,不妨看看它的VisualTree。


    To be the apostrophe which changed “Impossible” into “I’m possible”
    ----------------------------------------------------
    WinkingZhang's Blog (http://winkingzhang.cnblogs.com)
    GCDN(http://gcdn.grapecity.com/cs)
  • 相关阅读:
    textArea中的placeholder属性不起作用
    文件超出大小,进度条监听一直死循环一般的报错
    AJAX提交表单,上传出错的国际化信息无法显示在jsp页面上
    使用ajax提交表单,页面还是会自动刷新
    Springboot + vue 前后端分离学习
    Spring复习
    AJAX学习
    JWT以及相干实践
    动态sql语句MyBats
    SSH项目整合---项目环境搭建
  • 原文地址:https://www.cnblogs.com/winkingzhang/p/1374681.html
Copyright © 2011-2022 走看看