0

Я узнаю о пользовательских элементах управления и создаю autoCompleteTextBox в качестве примера. Я создаю настраиваемый элемент управления для проекта WPF (v 4.5 с vb.net 4.5), и он использует базовый класс текстового поля. Затем я добавил в элемент всплывающее окно, список и кнопку. У меня есть свойство зависимостей в пользовательском элементе управления для datatemplate из списка, но я не могу получить таблицу данных, помещенную в список.WPF CustomControl пройти через datatemplate в listbox не работает

здесь свойство зависимостей для datatemple:

#Region "DEPENDENCY PROPERTIES -- ItemTemplate" 
    Public Property ItemTemplate As DataTemplate 
     Get 
      Return GetValue(ItemTemplateProperty) 
     End Get 
     Set(ByVal value As DataTemplate) 
      SetValue(ItemTemplateProperty, value) 
     End Set 
    End Property 
    Public Shared ReadOnly ItemTemplateProperty As DependencyProperty = DependencyProperty.Register(_ 
         "ItemTemplate", GetType(DataTemplate), GetType(AutoCompleteTextBox), _ 
         New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.None, _ 
         New PropertyChangedCallback(AddressOf OnItemTemplateChanged))) 

    Shared Sub OnItemTemplateChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs) 
     Dim actb As AutoCompleteTextBox = TryCast(d, AutoCompleteTextBox) 
     If actb IsNot Nothing Then 
      Dim TempTemplate As DataTemplate = TryCast(e.NewValue, DataTemplate) 
      If TempTemplate IsNot Nothing Then 
       actb.ItemTemplate = TempTemplate 
      End If 
     End If 
    End Sub 
#End Region 

Вот моя XAML для объявления небольшой текст UserControl:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:krisis="clr-namespace:Krisis.Controls;assembly=Krisis.Controls" 
    Title="MainWindow" Height="350" Width="525" x:Name="MyWindow" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <Window.Resources> 
     <DataTemplate x:Key="CollectionTemplate"> 
      <Border BorderBrush="Green" BorderThickness="2" CornerRadius="5" Padding="5,5,5,2"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition/> 
         <RowDefinition/> 
        </Grid.RowDefinitions> 
        <TextBlock Text="OBJECT: "/> 
        <TextBlock Grid.Column="1" Text="{Binding Name}"/> 
        <TextBlock Grid.Row="1" Text="{Binding id}"/> 
        <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Job}"/> 
       </Grid> 
      </Border> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <krisis:AutoCompleteTextBox ItemsSource="{Binding Collection}" 
            ItemTemplate="{StaticResource CollectionTemplate}" 
            MaxmimumMatches="15" 
            MinimumFilterCharacters="1" 
            DisplayPath="Name" 
            Width="497" MinHeight="35" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,41,10,243" /> 
    </Grid> 
</Window> 

МОЯ ПРОБЛЕМА: в том, что, когда я использую это, чтобы объявить мой itemtemplate, оно не применяется. В списке отображается только имя типа объекта для каждого объекта в списке, а не значения свойств объекта.

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

заранее спасибо

ответ

0

окей, я chnaged, где я назначить ItemTemplate следующему и теперь он работает:

#Region "APPLY TEMPLATE" 
    Public Overrides Sub OnApplyTemplate() 
     MyBase.OnApplyTemplate() 

     '' if template is not nothing then initialize controls and wire up the event handlers 
     If Me.Template IsNot Nothing Then 

      InitializeListbox() 
      If ResultsListBox IsNot Nothing Then 
       OnItemSourceChanged(ItemsSource) 
       AddHandler ResultsListBox.KeyDown, AddressOf ResultListBox_KeyDown 
       AddHandler ResultsListBox.SelectionChanged, AddressOf ResultListBox_SelectionChanged 
       ResultsListBox.ItemTemplate = ItemTemplate 
       ResultsListBox.ItemsSource = ItemsSource 
      End If 
     End If 
    End Sub 
#End Region 
Смежные вопросы