Так что суть моего вопроса не в том, чтобы получить что-то, что у меня работает, а в том, чтобы проверить, работает ли TreeViewControl с DataTemplateSelector.У меня есть только «CardTemplateSelector», потому что я использую его в нескольких других местах моего приложения, и я знаю, что он работает.Мой вопрос на самом деле «да, древовидная структура работает с селектором» или «нет, это не так». Я действительно ищу кого-то еще, чтобы попробовать его со своим собственным селектором тестовых шаблонов и дать мне знать, могут ли они заставить его работать,Любой конкретный код от меня не имеет отношения к вопросу.Просто посмотрите, сможете ли вы заставить его работать с любым селектором, который вам нужен
Да.TreeView хорошо работает с ItemTemplateSelector
.
. Я использовал весь код в документе и создал собственный класс, подобный следующему:
public class Test
{
public string Name { get; set; }
}
Я сделал другойНапример, DataTemplate:
<DataTemplate x:Key="TreeViewObjDataTemplate">
<Grid Height="44">
<TextBlock
Text="{Binding Content.Name}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Style="{ThemeResource BodyTextBlockStyle}"/>
</Grid>
</DataTemplate>
Мой CardTemplateSelector
класс выглядит следующим образом:
public class CardTemplateSelector: DataTemplateSelector
{
public DataTemplate TreeViewItemDataTemplate { get; set; }
public DataTemplate TreeViewObjDataTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item)
{
TreeViewNode treeViewNode = item as TreeViewNode;
if (treeViewNode.Content is StorageFolder|| treeViewNode.Content is StorageFile)
{
return TreeViewItemDataTemplate;
}
if (treeViewNode.Content is Test)
{
return TreeViewObjDataTemplate;
}
return base.SelectTemplateCore(item);
}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return SelectTemplateCore(item);
}
}
Я просто добавляю код новой строки в MainPage.xaml.cs
:
TreeViewNode objnode = new TreeViewNode();
Test test = new Test() {Name="Parent"};
objnode.Content = test;
objnode.IsExpanded = true;
objnode.HasUnrealizedChildren = true;
sampleTreeView.RootNodes.Add(objnode);
Ниже приводится полный код ресурса страницы xaml:
<Page.Resources>
<DataTemplate x:Key="TreeViewItemDataTemplate">
<Grid Height="44">
<TextBlock
Text="{Binding Content.DisplayName}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Style="{ThemeResource BodyTextBlockStyle}"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="TreeViewObjDataTemplate">
<Grid Height="44">
<TextBlock
Text="{Binding Content.Name}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Style="{ThemeResource BodyTextBlockStyle}"/>
</Grid>
</DataTemplate>
<local:CardTemplateSelector x:Name="CardTemplateSelector" TreeViewItemDataTemplate="{StaticResource TreeViewItemDataTemplate}" TreeViewObjDataTemplate="{StaticResource TreeViewObjDataTemplate}"></local:CardTemplateSelector>
<Style TargetType="TreeView">
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<TreeViewList x:Name="ListControl"
ItemTemplateSelector="{StaticResource CardTemplateSelector}"
ItemContainerStyle="{StaticResource TreeViewItemStyle}"
CanDragItems="True"
AllowDrop="True"
CanReorderItems="True">
<TreeViewList.ItemContainerTransitions>
<TransitionCollection>
<ContentThemeTransition />
<ReorderThemeTransition />
<EntranceThemeTransition IsStaggeringEnabled="False" />
</TransitionCollection>
</TreeViewList.ItemContainerTransitions>
</TreeViewList>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
Пока я уже ответил на ваш вопрос.Но я все же хочу сообщить вам Как задать хороший вопрос .В моих комментариях выше я попросил вас предоставить соответствующий код, и тогда я смогу быстро воспроизвести ваш вопрос и помочь вам его диагностировать.Но ты сказал I'm really looking for someone else to try it with their own test template selector and to let me know if they can get it working.
.Все нормально.Вы могли видеть, что только я ответил.Вы задавали этот вопрос в течение многих дней.Другие члены сообщества не помогли вам в этом вопросе.Вот почему я прошу вас разместить здесь некоторый код.Если вы предоставите соответствующий код здесь, я думаю, что многие члены сообщества будут рады помочь вам в этом вопросе.Я действительно надеюсь, что вы могли понять это.