Создание пользовательского элемента управления Silverlight - PullRequest
0 голосов
/ 10 августа 2011

Мы пытаемся создать пользовательский элемент управления, содержащий обернутый раздел текстовых полей для каждого элемента в связанном с ним списке.

Как это:

<ItemsControl x:Name="asdf">
 <ItemsControl.ItemsPanel>
  <ItemsPanelTemplate>
   <controls:WrapPanel />
  </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>
 <ItemsControl.ItemTemplate>
  <DataTemplate>
   <TextBox Text="{Binding}" />
  </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

Однако, когда мы превращаем это в пользовательский элемент управления, он не устанавливает ItemsPanel в WrapPanel и не выполняет ItemTemplate:

<ItemsControl x:Class="SilverlightApplication1.PillTagBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls= "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit">

 <ItemsControl.ItemsPanel>
  <ItemsPanelTemplate>
   <controls:WrapPanel />
  </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>
 <ItemsControl.ItemTemplate>
  <DataTemplate>
   <TextBox Text="{Binding}" />
  </DataTemplate>
 </ItemsControl.ItemTemplate>

</ItemsControl>

Это просто показывает связанный список элементов, как будто не было стилей вообще:

<ItemsControl x:Name="asdf" />

Как превратить первый кусок XAML в пользовательский элемент управления?

Спасибо!

1 Ответ

2 голосов
/ 11 августа 2011

Для того, что вы хотите сделать, вам не нужен пользовательский элемент управления, достаточно стиля:

<Style x:Key="MyControlStyle" TargetType="ItemsControl">
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <controls:WrapPanel/>
            </ItemsPanelTemplate>
        </Setter.Value>  
    </Setter>
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBox Text="{Binding}" />
            </DataTemplate>
        </Setter.Value>  
    </Setter>
</Style>

А затем в экземпляре:

<ItemsControl x:Name="asdf" Style="{StaticResource MyControlStyle}" />

Если вынужен другой элемент управления по другим причинам:

  1. Создайте новый проект с шаблоном библиотеки элементов управления Silverlight (все определения в этом проекте).
  2. Если папка Темы отсутствует,добавьте его в корневой каталог проекта и создайте новый файл ResourceDictionary с именем Generic.xaml в папке Темы.
  3. Создайте новый класс, унаследованный от ItemsControl (давайте назовем его MyItemsControl).
  4. Добавьте конструктор следующим образом:

    public MyItemsControl() { this.DefaultStyleKey = typeof(MyItemsControl); }

  5. Добавьте указанный выше стиль в файл Generic.xaml, удалите атрибут x: Key и измените TargetType на MyItemsControl(вам нужно добавить определение xmlns для локального пространства имен).
  6. Теперь вернитесь к своему клиентскому проекту, сделайте ссылку на проект Control Library.
  7. Добавьте определение xmlns всоответствующая страница \ UserControl xaml file и используйте MyItemsControl как любой другой ItemsControl.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...