ListBox的自定义ItemsControl

时间:2011-12-14 11:40:06

标签: wpf listbox custom-controls listboxitem

我想将新的DependencyProperty添加到ListBox控件中使用的ListBoxItem类。我需要添加IsEditing属性。当用户长时间点击我的ListBoxItem时,我会将它的IsEditing属性更改为True,然后在此属性的Trigger中将更改样式。实际上是将TextBlock更改为TextBox的想法。

我希望我的解释清楚。它是否有意义,或者存在更简单的方法?

由于

1 个答案:

答案 0 :(得分:0)

请参阅下面的XAML - DataTemplate的子项是您项目的模板。您可以使用Grid,Canvas等内置WPF元素或您自己的用户/自定义控件。您可以创建EditableItem控件并使用它来处理长按鼠标等。

这不是最优雅的方式,但可能是最简单的方法。更高级的方法将涉及附加行为的使用,这消除了对自定义/用户控件的需要。另外,看看VisualStateManager类,它可以简化不同模式之间的切换'您可编辑的项目(无论如何我都会使用它)。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

        <ListBox x:Name="l">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Height="30" Background="Green" Width="100">
                        <TextBlock Text="{Binding}" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Loaded += (o, e) => 
            {
                this.l.ItemsSource = Enumerable.Range(1, 3);
            };
        }
    }
}