2011-12-14 4 views
0

Я хочу добавить новый класс DependencyProperty в класс ListBoxItem, который используется в элементе управления ListBox. Мне нужно добавить свойство IsEditing. Когда пользователь будет делать длинный клик на моем ListBoxItem, я изменю его свойство IsEditing на True, а затем в Trigger этого свойства будет изменяться стиль. На самом деле идея изменить TextBlock на TextBox в стиле.Custom ItemControl для ListBox

Я надеюсь, что мои разъяснения понятны. Имеет ли смысл какой-либо смысл, или существует более простой способ?

Благодаря

+0

как вы выяснить, 'длинный клик'? – StaWho

+0

Я буду переопределять OnButtonDown и запустить таймер, если управление потеряло фокус или OnButtonUp поднят - таймер останавливается. Если ничего другого не произойдет - будет повышаться timer.tick. smth вроде –

+1

В чем проблема? –

ответ

0

Смотрите ниже код 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); 
      }; 
     } 
    } 
} 
Смежные вопросы