在ListBoxItem中增加Button实现添加继续添加ListBoxItem

原创 2016年11月17日 10:29:27

近段在做一个功能,在ListBoxItem中点击Button 实现添加Item并选中最新添加项,把代码分享出来。

xaml:

<Window x:Class="WpfCustomerControl.ListBoxWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ListBoxWindow" Height="300" Width="300" WindowStartupLocation="CenterScreen" >
    <Window.Resources>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
            <Setter Property="Margin" Value="20,5,5,5"></Setter>
            <Setter Property="Height" Value="50"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Grid x:Name="grid" Background="Gray">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="auto"></ColumnDefinition>
                                <ColumnDefinition></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBox Width="120" Text="{TemplateBinding Content}"></TextBox>
                            <Button x:Name="btnAdd" Width="60" Content="+" Grid.Column="1" PreviewMouseLeftButtonDown="btnAdd_MouseLeftButtonDown"></Button>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter TargetName="grid" Property="Background" Value="Red"></Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="lbData"></ListBox>
    </Grid>
</Window>
后台代码:
  public partial class ListBoxWindow : Window
    {
        public ListBoxWindow()
        {
            InitializeComponent();
            this.lbData.Items.Add(DateTime.Now.ToString("yyyyMMdd hh:mm:ss"));
        }
        private void btnAdd_MouseLeftButtonDown(object sender, RoutedEventArgs e)
        {
            object obj = e.OriginalSource;
            this.lbData.Items.Add(DateTime.Now.ToString("yyyyMMdd hh:mm:ss"));

            e.Handled = true;
            this.lbData.SelectedIndex = this.lbData.Items.Count - 1;
            ScrollViewer sv = this.GetChildObject<ScrollViewer>(lbData, "");
            if (sv != null)
                sv.ScrollToBottom();  // 滚动到末尾
        }

        public T GetChildObject<T>(DependencyObject obj, string name) where T : FrameworkElement
        {
            DependencyObject child = null;
            T grandChild = null;
            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);
                if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
                {
                    return (T)child;
                }
                else
                {
                    grandChild = GetChildObject<T>(child, name);
                    if (grandChild != null)
                        return grandChild;
                }
            }
            return null;
        }
    }

效果:



WPF listbox 的datatemplate中添加触发器,控制template中某个按钮的显示隐藏

WPF学习笔记——ListBox用ItemsSource绑定数据源

protected class UserItem { public UserItem(int Id, string Name, bool IsActived) ...
  • leftfist
  • leftfist
  • 2014年05月10日 13:37
  • 26449

wpf动态生成ListBox 及添加ListBoxItem 并定义样式

//创建一个ListBoxListBox list=new ListBox();//创建一个ListBoxIemListBoxItem item = new ListBoxItem();//定义Lis...

C# 让ListBox可编辑

本文思想来自:http://www.lwolf.cn/blog/article/code/csharp-editable-listbox.htm 非常感谢! 正常情况下,.Net自带的ListBox是...
  • luols
  • luols
  • 2011年03月03日 15:10
  • 6058

循环添加数据到listBox

private void button4_Click(object sender, EventArgs e) { if (treeView1.Selecte...
  • wxl2012
  • wxl2012
  • 2010年06月14日 17:52
  • 2792

WPF中ListBox的创建和多种绑定用法

本篇博文为翻译(http://www.c-sharpcorner.com/uploadfile/mahesh/listbox-in-wpf/),本篇博文主要介绍ListBox控件的创建和用法。 先从...

listbox动态选择模版

献上效果图: 预期效果 1)Listbox动态选择模版 2)鼠标移上去后显示操作按钮 模版实现 (FButton请参考 Fbutton模版) 1.加号模版 ...

WPF ListBoxItem模板

这个模板主要是实现一个带有图标的

listbox控件用法详解

1. 属性列表:     SelectionMode    组件中条目的选择类型,即多选(Multiple)、单选(Single)     Rows             列表框中显示总共多少行 ...
  • SMF0504
  • SMF0504
  • 2016年06月27日 12:33
  • 14777

listbox的添加新项的方法

listbox的添加新项的方法: --1---         public class ListItem         {             private string id = ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ListBoxItem中增加Button实现添加继续添加ListBoxItem
举报原因:
原因补充:

(最多只允许输入30个字)