Перемещение DataTemplates из TreeView.Resources в Window.Resources
<Window.Resources><DataTemplate x:Key="DefaultTemplate">
<TextBlock Text="{Binding Header}"></TextBlock>
</DataTemplate><DataTemplate x:Key="Regulation">
<TextBlock Text="{Binding Path=Header}" FontWeight="Bold"></TextBlock>
</DataTemplate>
<DataTemplate x:Key="Article">
<TextBlock Text="{Binding Path=Header}" Foreground="Green"></TextBlock>
</DataTemplate>
<local:TreeViewItemTemplateSelector x:Key="TemplateSelector" DefaultTemplate="{StaticResource DefaultTemplate}" ArticleTemplate="{StaticResource Article}" RegulationTemplate="{StaticResource Regulation}" />
и внести изменения
<TreeView ItemTemplateSelector="{StaticResource TemplateSelector}" Height="409" HorizontalAlignment="Left" Margin="10,10,0,0" Name="treeView1" VerticalAlignment="Top" Width="277" ItemsSource="{Binding}"/>
Обновить код и мы посмотрим. Я поместил аналогичный код в VS, и он работает, поэтому нам нужно взглянуть более внимательно. Таким образом, я проверил это и изменил
public class TreeViewCustomItem
{
public string Header { get; set; }
}
и это
listmy = new ObservableCollection<TreeViewCustomItem> { new TreeViewCustomItem { Header = "xD" }, new TreeViewCustomItem { Header = "xxD" } };
//treeView1.ItemsSource = listmy;
this.DataContext = listmy;
public class selector : DataTemplateSelector
{
public DataTemplate RegulationTemplate { get; set; }
public DataTemplate DefaultTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
TreeViewCustomItem treeViewItem = item as TreeViewCustomItem;
if (treeViewItem.Header == "xD")
{
return RegulationTemplate;
}
else
{
return DefaultTemplate;
}
}
}
и в XAML выглядит следующим образом
xmlns:local="clr-namespace:WpfApplication1.Views">
<Window.Resources>
<DataTemplate x:Key="DefaultTemplate">
<TextBlock Text="{Binding Header}"></TextBlock>
</DataTemplate>
<DataTemplate x:Key="Regulation">
<TextBlock Text="{Binding Path=Header}" FontWeight="Bold"></TextBlock>
</DataTemplate>
<local:selector x:Key="selector_" DefaultTemplate="{StaticResource DefaultTemplate}" RegulationTemplate="{StaticResource Regulation}"/>
</Window.Resources>
<Grid>
<TreeView Height="409" HorizontalAlignment="Left" Margin="10,10,0,0" Name="treeView1" VerticalAlignment="Top" Width="277"
ItemsSource="{Binding}" ItemTemplateSelector="{StaticResource selector_}"/>
</Grid>
И это работает так, моя самонадеянность, что проблема находится внутри TreeViewCustomItem.
Ваш XAML выглядит немного неправильным, может быть его частью (ваш селектор в «Window.Resources» ссылается на статические ресурсы, которые не существуют в указанном XAML, и ваш «TreeView.ItemSource» установлен to '{Binding}', должен быть '{Binding listmy}' от внешнего вида. – Psytronic
Thx Psytronic для anwser, но когда я использую {Binding listmy} Я не вижу никаких элементов в своем treeView Я прокомментировал сейчас линия в MainWindow(): //this.datacontext=listmy; и в XAML Я удалил тег к –
matti2515
Ааа, да, жаль пропустил эту линию делать. вы получаете какие-либо ошибки в окне вывода при запуске приложения? – Psytronic