Я узнаю о пользовательских элементах управления и создаю 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 из списка в настраиваемом элементе управления.
заранее спасибо