Как я могу использовать ListBox в качестве базового класса? - PullRequest
0 голосов
/ 17 июля 2011

Я использую ListBox, чтобы показать сетку. Я хочу создать некоторый класс, который будет основан на ListBox (производном от него) и изменить ItemTemplate этого производного класса.

Как я могу это сделать?

Я пытаюсь определить класс, производный от UserControl класса - и изменить производный класс на ListBox рядом с UserControl классом - но это не работает.

Есть ли другой способ?

Мне нужно иметь возможность изменять шаблон ListBoxItem в ListBox, как я это делаю в ListBox, который я добавляю на простую страницу silverlight.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Другой способ сделать это, если вы хотите, чтобы ваш элемент управления по умолчанию выглядел как ListBox.Просто создайте класс, производный от ListBox, и в конструкторе по умолчанию измените DefaultStyleKey:

public class MyListBox : ListBox
{
    public MyListBox()
    {
        // the control would look like a listBox by default
        DefaultStyleKey = typeof (ListBox);
    }

    (...)
}
1 голос
/ 17 июля 2011

что вы можете сделать, это создать шаблонный элемент управления (вы можете легко создать его через визуальные студии Add - New Item menu), который вы получаете из ListBox:

public class MyListBox : ListBox
{
    public MyListBox()
    {
        this.DefaultStyleKey = typeof(MyListBox);
    }
}

Когда вы создаете шаблонный элемент управления, он также создает папку Themes и там файл generic.xaml, в котором определены ваши стили. После этого возьмите ListBox - Style из здесь , скопируйте и вставьте его в свой файл generic.xaml в нужное место (вам также необходим ValidationTooltipTemplate):

<Style TargetType="local:MyListBox">
        <Setter Property="Padding" Value="1"/>
        <Setter Property="Background" Value="#FFFFFFFF" />
        <Setter Property="Foreground" Value="#FF000000"/>
        <Setter Property="HorizontalContentAlignment" Value="Left" />
        <Setter Property="VerticalContentAlignment" Value="Top" />
        <Setter Property="IsTabStop" Value="False" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="TabNavigation" Value="Once" />
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="BorderBrush"> ...

Хорошо, после этого определите ваш ItemTemplate в том же xaml:

<DataTemplate x:Key="MyItemTemplate">

и добавьте его в список сеттеров вашего стиля ListBox:

<Style TargetType="local:MyListBox">
        <Setter Property="ItemTemplate" Value="{StaticResource MyItemTemplate}"/>^

Теперь это ваш шаблон по умолчанию.

Но нужно ли вам добавлять какое-либо конкретное поведение в свой ListBox, потому что вы хотите наследовать от него. Если вы просто хотите добавить конкретный шаблон элемента, я бы не рекомендовал наследовать от ListBox (на самом деле DataTemplate не является универсальным, он всегда специфичен для DataType). Если вы не добавите конкретное поведение, я бы пошел для создания глобального DataTemplate (может быть, определен в вашем app.xaml) и ссылался бы на него как DataTemplate каждый раз, когда вам это нужно, или я бы создал определенный стиль с этим DataTemplate и установил бы стиль общий ListBox.

Если у вас есть какие-либо вопросы, просто оставьте комментарий.

Надеюсь, это поможет!

BR

TJ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...