См. Ниже XAML - дочерний элемент DataTemplate является шаблоном вашего элемента. Вы можете использовать встроенные элементы WPF, такие как Grid, Canvas и т. Д., Или свой собственный пользовательский / пользовательский элемент управления. Вы можете создать элемент управления 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);
};
}
}
}