日期:2014-05-18  浏览次数:21061 次

wpf中checkbox的这段代码为何没有效果?
C# code

<RowDefinition Height="120">
                <RowDefinition.Style>
                    <Style TargetType="RowDefinition">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=cbSendSms,Path=IsChecked}" Value="True">
                                <Setter Property="Height" Value="120"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=cbSendSms,Path=IsChecked}" Value="False">
                                <Setter Property="Height" Value="0"/>                               
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </RowDefinition.Style>                
            </RowDefinition>



cbSendSms是一个checkbox,原想是勾选这个checkbox后把grid的RowDefinition高度设为120(显示),取消勾选后设为0(隐藏),但却没有效果, 用radiobutton就可以,测试过checkbox的checked事件只是在选中是才触发,取消选中时没有触, 是否跟这个有关系,如果是那有什么方法解决这个

------解决方案--------------------
如果安装了Blend后,添加System.Windows.Interactivity和Microsoft.Expression.Interactions项目引用,然后在xaml中添加引用:

HTML code

        
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

------解决方案--------------------
checked 应该是被选中后的事件吧
感觉你可以在mouseleftdown里面判断checkbox是否被选中(checkbox.checked)
------解决方案--------------------
如果只是折腾Grid的Row,那么把Row这行设为Auto,然后将Row里面的内容的Visibility绑定到Checkbox的IsChecked上,当然要配备一个Bool2VisibilityConverter
当IsChecked=true的时候,返回Visible,否则返回Collapsed
这里用Collapsed而不用Hidden的原因就是塌陷以后不会在Measure中跟Parent申请空间,而Hidden则会持有空间,虽然不显示,而Auto则会变为0,达到你的效果

------解决方案--------------------
貌似我还没有安装Blend ,就说怎么找不到 System.Windows.Interactivity 的引用落
------解决方案--------------------
测试过checkbox的checked事件只是在选中是才触发,取消选中时没有触发

checkbox有unchecked事件,在那里添加代码即可