关于WrapPanel和RadioButton相互配合使用实WrapPanel现动态添加或删除项

最近在做一个项目的时候,有一个需求就是,通过RadioButton来控制一行内容的显示与不显示,当不显示的时候,下面的项能够占住相应的位置,当增加的时候,又会在原来的位置重新显示,如果使用一般的Grid或者其它的布局的时候,位置就确定下来了,但是使用WrapPanel或者StackPanel这类的控件的时候,能够在增加或者删除项的时候实现重新布局,这在实际使用的时候是非常有用的,现总结如下:

<WrapPanel Grid.Column="1" Grid.Row="1" Orientation="Vertical" HorizontalAlignment="Center">
        <StackPanel Orientation="Horizontal" Visibility="{Binding Path=JDBHIsVisibility, Mode=TwoWay,Converter={StaticResource BoolToVisibility

Converter}}">
               <Border BorderBrush="Transparent" BorderThickness="2" Height="70">
                       <Label Name="lbl00" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66"                                    Width="300">警单编号:</Label>
               </Border>
            <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
                 <Label Name="lb_id" Content="{Binding Path=JDBH,Mode=TwoWay}" Style="{StaticResource StyleLabel}" HorizontalAlignment="Left"                               Height="66" Width="715">

</Label>

           </Border>

      </StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding Path=BJSJIsVisibility, Mode=TwoWay,Converter={StaticResource                                                   BoolToVisibilityConverter}}">
           <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
                <Label Name="lbl10" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66"                                      Width="300">报警时间:</Label>
          </Border>
         <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
             <Label Name="lb_time" Content="{Binding Path=BJSJ,Mode=TwoWay}" Style="{StaticResource StyleLabel}" HorizontalAlignment="Left"                       VerticalAlignment="Center" Height="66" Width="715"></Label>
         </Border>
</StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding Path=BJDZIsVisibility, Mode=TwoWay,Converter={StaticResource                                                     BoolToVisibilityConverter}}">
              <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
                    <Label x:Name="lbl20" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66"                                      Margin="0,8" Width="300" Content="报警地址:"/>
              </Border>
             <Border BorderBrush="Transparent" BorderThickness="2" Height="70" Width="716" >
                 <Label x:Name="lb_addr" Content="{Binding Path=BJDZ,Mode=TwoWay}" Style="{StaticResource StyleLabel}"                                                                  HorizontalAlignment="Left"  Height="66" Width="715" Margin="0,-2,-2,-2" />
            </Border>
</StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding Path=BJXQIsVisibility, Mode=TwoWay,Converter={StaticResource                                                      BoolToVisibilityConverter}}">
         <Border BorderBrush="Transparent" BorderThickness="2" Height="70">
              <Label Name="lbl30" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66" Margin="0,8"   Width="300">报警详情:</Label>
        </Border>
       <Border BorderBrush="Transparent" BorderThickness="2" Height="70" Width="716" >
              <Label x:Name="lb_detail" Content="{Binding Path=BJXQ,Mode=TwoWay}" Style="{StaticResource StyleLabel}" HorizontalAlignment="Left"    Height="66" Width="715" />
      </Border>
</StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding Path=BJRIsVisibility, Mode=TwoWay,Converter={StaticResource                                                     BoolToVisibilityConverter}}">
             <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
                 <Label Name="lbl40" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66"                                     Width="300">报 警 人:</Label>
            </Border>
           <Border BorderBrush="Transparent" BorderThickness="2" Height="70" Margin="0,0,10,0" >
                <Label Name="lb_person" Content="{Binding Path=BJR,Mode=TwoWay}" Style="{StaticResource StyleLabel}" HorizontalAlignment="Left"                         Height="66" Width="715">

                </Label>
          </Border>
</StackPanel>
<StackPanel Orientation="Horizontal" Visibility="{Binding Path=BJDHIsVisibility, Mode=TwoWay,Converter={StaticResource                                                      BoolToVisibilityConverter}}">
              <Border BorderBrush="Transparent" BorderThickness="2" Height="70" >
                   <Label Name="lbl50" Style="{StaticResource StyleLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" Height="66"                                      Width="300" Margin="0,-2">报警电话:</Label>
            </Border>
            <Border BorderBrush="Transparent" BorderThickness="2" Height="70" Width="719" >
                  <Label Name="lb_phone" Content="{Binding Path=BJDH,Mode=TwoWay}" Style="{StaticResource StyleLabel}"                                                             HorizontalAlignment="Left"   Height="66" Width="719" Margin="-2,-2,-2,1"/>
           </Border>
       </StackPanel>
</WrapPanel>              

这里在WrapPanel中嵌套多个StackPanel,注意Visibility="{Binding Path=BJDHIsVisibility, Mode=TwoWay,Converter={StaticResource                                                      BoolToVisibilityConverter}}"> 实现的核心是,这里我们定义了一个依赖项属性BJDHIsVisibility,并且和RadioButton的IsChecked属性绑定到一起,当RadioButton选中的时候,IsChecked属性为True,我们不能直接将两个属性绑定到一起,必须去定义一个转换器,将BOOL类型的值转化为Visibility所支持的形,这里需要注意,当RadioButton的IsChecked属性为False的时候,Visibility的属性为Visibility.Hidden,此时WrapPanel会实现重新排列,这是我们需要注意的地方,以后需要的时候可以参考此值!

时间: 2024-08-09 23:51:35

关于WrapPanel和RadioButton相互配合使用实WrapPanel现动态添加或删除项的相关文章

利用JS实现在li中添加或删除class属性

$( function() { $("#test li").click(function(){ $("#test li").removeClass("center"); $(this).addClass("center"); })});

Xamarin.Android 入门实例(4)之实现对 SQLLite 进行添加/修改/删除/查询操作

1.Main.axml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent"

动态添加试题选项按钮 radioButton

最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需要动态添加按钮,一个RadioGroup里面存放若干Radio(这些都是从数据库获取来的数据),然后每次动态生成Radio 以下是动态添加按钮的代码:—————————————————— private LinearLayout layout; //布局 , 可以在xml布局中获得 private 

Winform 动态添加RadioButton、CheckBox 且任意分组

</pre><pre name="code" class="csharp">//按列分组(n>i且listSize>n) <span style="white-space:pre"> </span>public void showRadioButton(int listSize, List<String> list) { //控件上边缘与容器上边缘的距离 int top =

动态添加RadioButton并切换Fragment

公司项目中有这样一个需求,当从网络获取json数据并解析后,动态的添加按钮,点击时切换对应按钮下存储的各种数据. 如下图: 这里只是单单为了动态添加RadioButton而已,所以数据直接用Fragment替换,效果如下: MainActivity: package com.ut.radiobuttondynamicadd; import android.os.Bundle; import android.support.v4.app.Fragment; import android.suppo

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

RadioGroup动态添加RadioButton,并且获得事件

由于有许多的RadioButton是动态的,不是固定的一些,所以需要在代码中,动态的添加到RadioGroup中,下面是我的实现方法. 1.添加RadioButton到RadioGroup中 [java]  view plain copy RadioGroup group; for(int i=0; i<10; i++) { RadioButton tempButton = new RadioButton(this); tempButton.setBackgroundResource(R.dra

bbed与od的配合使用恢复快3平台搭建被删除的数据文件

如何使用bbed(bbed和od配合使用)获取文件id,快3平台搭建[企鹅21717-93408]完成数据文件丢失的修复su - oraclecd $ORACLE_HOME/rdbms/libmake -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed 找到对应文件的fd1.[root@11g ~]# ps -ef|grep dbworacle 3257 1 0 03:57 ? 00:00:00 ora_dbw0_orclroot 3723 3709 0 06

ThinkPHP框架下,jq实现在div中添加标签并且div的大小会随之变化

php初学者,有什么不对的还请指正. 首先是在html页面中用jq实现添加标签:divAchivePersonnal是select所在的div的外层div,divselectAchivePersonnal是select的最近一层div,info内是字符串拼接,jq标签插入用append方法.接下来是调整css样式,使div会随着标签增加而加大,这里要用一个css属性overflow(亲自查),这里直接在divselectAchivePersonnal使用时不会达到你想要的效果,所以至少要有两个嵌