Пользовательский ItemControl для ListBox - PullRequest
0 голосов
/ 14 декабря 2011

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

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

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2011

См. Ниже 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);
            };
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...