winphone listbox 编辑列表

实现的功能:
点击 “编辑” 按钮,删除图标 “-”显示,”编辑“变为“取消”,“名称”字段向右移动适当距离;点击“-”实现删除 一行,刷新页面。
点击“取消”,删除图标 “-”隐藏,”取消“变为“”编辑,“名称”字段向左移动适当距离。
相关图片:
设计:(下方红色框为 删除图标 “-”区域,“113”为“名称”字段区域)
 
                 正常状态:                                          编辑状态:
                    
一、前台页面:
页面要引用 :    xmlns :  c4fToolkit  ="clr-namespace:Coding4Fun.Phone.Controls;assembly=Coding4Fun.Phone.Controls"
     xmlns :  c4fToolkitBinding ="clr-namespace:Coding4Fun.Phone.Controls.Binding;assembly=Coding4Fun.Phone.Controls"
“编辑” 按钮:
                      <  c4fToolkit :  Tile      Grid.Column  ="2"     Width  ="0"  Height ="70"  Title  ="编辑"  x  :  Name ="editTxt"  Click ="Edit_Click" >
                         <  Image  Name  ="editImg"  Source ="/images/edit.png"  Stretch  ="None"  Margin  ="-72,0,-54,0"     />
                     </  c4fToolkit :  Tile  >
删除图标 “-”:                   <  local :  DeleteListBox  Grid.Column ="0"  Visibility  ="Collapsed"  Name  ="lb0" ScrollViewer.VerticalScrollBarVisibility ="Disabled"  ScrollViewer.HorizontalScrollBarVisibility  ="Disabled"  Margin ="0,0,0,0">
                         <  local :  DeleteListBox.ItemTemplate  >
                             <  DataTemplate >
                                 <  Grid >
                                     <  Grid.RowDefinitions >
                                         <  RowDefinition  Height  ="40" />
                                     </  Grid.RowDefinitions >
                                     <  Grid.ColumnDefinitions >
                                         <  ColumnDefinition  Width  ="37"/>
                                     </  Grid.ColumnDefinitions >
                                     <  Image  Source  ="/images/delete.png"  Margin ="10,0,0,0"  Height  ="20"  Width  ="40" />
                                 </  Grid >
                             </  DataTemplate >
                             </  local :  DeleteListBox.ItemTemplate  >
                     </  local :  DeleteListBox  >

二、后台:

加载页面时给 lb0, lb1赋值, Quote 列表实体类
                      ObservableCollection  < Quote  > quotes =  new   ObservableCollection <  Quote  >();
                     ObservableCollection  < Quote  > qs = ( ObservableCollection  <  Quote >)  JsonConvert  .DeserializeObject(reader.ReadToEnd(), typeof  ( ObservableCollection  <  Quote >));
                     //lb0删除图标,lb1名称字段
                    lb1.Dispatcher.BeginInvoke(() => { lb1.ItemsSource = quotes; });
                    lb0.Dispatcher.BeginInvoke(() => { lb0.ItemsSource = quotes; });


         ///   <summary>
         ///  编辑,取消 事件
         ///   </summary>
         ///   <param name="sender"></param>
         ///   <param name="e"></param>
         private   void  Edit_Click(  object  sender,  RoutedEventArgs  e)
        {
             //lb0删除图标,lb1名称字段
             if  (editTxt.Title ==  "编辑"  )
            {
                 //删除图标 “-”,“名称”字段向左右移动适当位置
                lb1.Margin =  new   Thickness  (6, 0, 0, 0);
                lb0.Margin =  new   Thickness  (0, 0, 0, -6);
                 //删除图标 “-”显示
                lb0.Visibility =  Visibility  .Visible;
                editTxt.Title =  "取消"  ;
                 //按钮“编辑”变“取消”
                editImg.Source =  new   BitmapImage  (  new   Uri (  "/Images//cancel.png" UriKind  .Relative));
            }
             else
            {
                lb1.Width = 150;
                 //删除图标 “-”,“名称”字段向左右移动适当位置
                lb1.Margin =  new   Thickness  (-36, 0, 0, 0);
                lb0.Margin =  new   Thickness  (0, 0, 0, 36);
                 //删除图标 “-”显示
                lb0.Visibility =  Visibility  .Collapsed;
                editTxt.Title =  "编辑"  ;
                 //按钮“取消”变“编辑”
                editImg.Source =  new   BitmapImage  (  new   Uri (  "/Images//edit.png" UriKind  .Relative));
            }
        }


         ///   <summary>
         ///  在此页将要在 Frame 中显示时进行调用。
         ///   </summary>
         ///   <param name="e">  描述如何访问此页的事件数据。
         ///  属性通常用于配置页。  </param>
         protected   override  void  OnNavigatedTo(  NavigationEventArgs  e)
        {
             base  .OnNavigatedTo(e);
             try
            {
                 if  (NavigationContext.QueryString.Count > 0)
                {
                     string  m = NavigationContext.QueryString[  "m" ];
                     //删除一行页面刷新后仍然处于编辑状态
                     if  (m ==  "edit"  )
                    {
                         //lb0删除图标,lb1名称字段。删除图标 “-”,“名称”字段向左右移动适当位置
                        lb1.Margin =  new   Thickness  (6, 0, 0, 0);
                        lb0.Margin =  new   Thickness  (0, 0, 0, -6);
                         //删除图标 “-”显示
                        lb0.Visibility =  Visibility  .Visible;
                        editTxt.Title =  "取消"  ;
                         //按钮“编辑”变“取消”
                        editImg.Source =  new   BitmapImage  (  new   Uri (  "/Images//cancel.png" UriKind  .Relative));
                    }

                }
            }
             catch  ( Exception  ex)
            {

            }
        }

  ListBox删除实体类
    public   class   DeleteListBox  ListBox
    {
         public   static  App .  GlableInfo  appInfo =  new   App  .  GlableInfo ();
         protected   override  void  PrepareContainerForItemOverride(  DependencyObject  element,  object  item)
        {
             base  .PrepareContainerForItemOverride(element, item);
             //ListBox列表行的Index
             int  index = ItemContainerGenerator.IndexFromContainer(element);
             ListBoxItem  li = element  as  ListBoxItem ;
             //给ListBox列表每行名称赋值
            li.Name = (item  as   Quote  ).Code +  "|"  + (item  as   Quote  ).Name +  "|"  + (item  as   Quote  ).TypeCode;
             //给ListBox列表按奇、偶行赋背景颜色,奇数行背景色为TransParent,偶数行为#101010
            li.Background = index % 2 == 0 ?  null   Utility  .GetColorFromHexa(  "#101010" , 255);
             //声明ListBox列表每行的点击事件
            li.Tap +=  new   EventHandler  <System.Windows.Input.  GestureEventArgs >(EventHandler);
        }


         public   void  EventHandler(  object  sender, System.Windows.Input.  GestureEventArgs  e)
        {
             //取ListBox列表每行名称
             string  [] param = (sender  as  ListBoxItem ).Name.Split(  '|'  );
             string  currentCode = param[0].Replace( " "  "+" );
             string  currentName = param[1].Replace( " "  "+" );
             string  currentType = param[2];
             string  strMsg =  string  .Format(  "您确认要将 {0} 从我的自选中删除吗?"  , currentName);
             //弹出框选择是否删除此行
             MessageBoxResult  mbr =  MessageBox  .Show(strMsg, appInfo.AppName,  MessageBoxButton  .OKCancel);
             if  (mbr ==  MessageBoxResult  .OK)
            {
                 //SQLite数据库中删除此行
                 SQLiteHelper  .insertDelData(currentCode, currentType);
                 //刷新页面,给时间参数避免页面缓存不刷新
                (  Application  .Current.RootVisual  as  PhoneApplicationFrame ).Navigate(  new   Uri  ( "/diyPage.xaml?m=edit&dt="  + DateTime .Now.ToString(),  UriKind  .Relative));
            }
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPF的ListBox控件是一种用于显示多个项目的通用控件,可以通过设置ItemsSource属性来绑定数据源。当我们需要在ListBox中显示图片列表时,可以采用以下步骤: 1. 准备数据源:首先我们需要准备一个包含图片的数据集合,可以是从数据库中查询得到的图片路径集合,也可以是程序中预先定义的路径集合。 2. 创建ListBox:在XAML中创建一个ListBox控件,并给它一个唯一标识符,方便后续引用。 3. 绑定数据源:在代码中,找到ListBox控件的实例,设置它的ItemsSource属性为我们准备好的数据源。这可以通过使用数据绑定功能实现,例如使用绑定到ViewModel中的ObservableCollection集合。 4. 定义ItemTemplate:为了在ListBox中显示图片,我们需要定义一个ItemTemplate(项目模板)。可以在ListBox的ItemTemplate属性中定义一个DataTemplate,用来显示每个项目的外观。在DataTemplate中,可以使用Image控件来展示图片。 5. 绑定图片路径:在DataTemplate中,可以使用图片的路径属性(可以是我们准备的数据源中的属性)绑定到Image控件的Source属性上,从而实现图片的显示。 6. 细化列表样式:如果需要进一步改变列表的外观,可以设置ListBox的ItemContainerStyle属性,来自定义每个项目的样式。例如,可以为每个项目添加边框、背景色等效果,以增强显示效果。 通过以上步骤,我们就可以实现一个WPF的ListBox图片列表,便于展示和浏览图片。当我们从数据源中更改图片路径时,ListBox将自动更新内容。 ### 回答2: WPF的ListBox控件可以用于显示图片列表。要实现这个功能,可以按照以下步骤进行: 1. 首先,准备一个用于存储图片路径的集合(如ObservableCollection),并将其绑定到ListBox的ItemsSource属性上。例如,可以创建一个名为"imageList"的ObservableCollection对象,并将其赋值给ListBox的ItemsSource属性。 2. 然后,修改ListBox的ItemTemplate属性,以便在每个列表项中显示图片。可以使用Image控件作为ItemTemplate的基础,并将其Source属性绑定到当前项的图片路径属性。例如,可以创建一个DataTemplate,并在其中添加一个Image控件,并将其Source属性绑定到当前项的"ImagePath"属性。 3. 接下来,可以定义ListBox的布局,以确定如何展示图片列表。可以使用StackPanel、Grid或WrapPanel等控件来对列表项进行布局。可以自定义ListBox的ItemContainerStyle属性来修改每个列表项的外观,例如设定边框、背景色等。 4. 最后,可以为ListBox添加一些交互功能,如选中事件或双击事件。可以通过ListBox的SelectionChanged事件处理程序来响应选中事件,或使用相应的命令(如Command)来实现相应的逻辑。 综上所述,使用WPF的ListBox控件可以很方便地实现图片列表的展示。通过绑定数据源、调整ItemTemplate、布局以及添加交互功能,我们可以自定义ListBox以满足我们的需求,达到良好的用户体验。 ### 回答3: WPF ListBox 是一个用于显示列表数据的功能强大的控件,可以显示文本、图像甚至是复合的内容。要在 ListBox 中显示一系列的图片,可以按照以下步骤进行操作: 1. 首先,准备一组要显示的图片。可以将这些图片添加到解决方案中的任意文件夹中,确保这些图片的属性设置为 "复制到输出目录:如果较新则复制"。 2. 在 XAML 中创建 ListBox 控件,设置其 Name 属性以便在代码中引用它,并设置其部分属性,如高度、宽度、边框线条等。 3. 在 XAML 中,使用 ListBox 的 ItemTemplate 属性设置每个列表项的展示方式。可以使用 StackPanel 等布局控件来控制图片和文本的位置。 4. 在 XAML 中,使用 ListBox 的 ItemsSource 属性将数据绑定到 ListBox。可以通过创建一个图片列表的集合对象,并将其赋值给 ItemsSource,来实现数据绑定。 5. 在代码中,创建一个继承自 INotifyPropertyChanged 的 ViewModel 类,用于处理列表中图片的更新和选择。在 ViewModel 类中,定义一个 ObservableCollection 对象,用于存储图片列表。 6. 在代码中,给 ViewModel 的 Observable Collection 对象添加每个图片的路径和其他相关信息,以便在 ListBox 中显示。同时,在 ViewModel 中添加选中图片的属性,并在选择发生变化时触发 PropertyChanged 事件。 7. 最后,在代码中,将 ListBox 的 DataContext 属性设置为 ViewModel 的实例。这样,ListBox 将会使用 ViewModel 提供的数据进行显示。 通过以上步骤,可以实现在 WPF ListBox 中显示图片列表。当用户选择不同的图片时,可以通过 ViewModel 中的属性来实现相应的逻辑处理。这样,可以让用户方便地浏览和选择图片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值