我只有两个星期的WPF,所以这可能是一个微不足道的问题.我有一个集合"CellList",它有一些我希望绑定到的属性,ToolTip所以当我将鼠标悬停在CellList显示的当前实例的标签信息上时.我怎么做?我理解简单的绑定,这也许是简单的绑定,但我无法绕过它.下面是我的XAML标签.有人可以向我解释我是如何做到这一点的.
<HierarchicalDataTemplate>
<ListBox ItemsSource="{Binding CellList}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content=" " Height="20" Width="15" Background="{Binding Path=ExptNameBkg, Converter={StaticResource ExptNameToBrushConverter}}" BorderBrush="Black" BorderThickness="1" >
</Label>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
谢谢.
您将如何将 CollectionViewSource(用于提供排序行为)与 HierarchicalDataTemplate 的 ItemsSource 结合使用?
因此,鉴于下面的代码,我如何对层次结构中每个级别的子级应用排序?
<HierarchicalDataTemplate DataType="{x:Type l:CommandGroup}"
ItemsSource="{Binding Children}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}"
BasedOn="{StaticResource {x:Type MenuItem}}">
<Setter Property="Command"
Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
我以为我可能能够执行以下操作,但它使后代无法显示并产生以下绑定错误。
<HierarchicalDataTemplate DataType="{x:Type l:CommandGroup}">
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource Source="{Binding Children}" />
</Binding.Source>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}"
BasedOn="{StaticResource {x:Type MenuItem}}">
<Setter Property="Command"
Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement …Run Code Online (Sandbox Code Playgroud) 我有一个类,MyClass<MyObject>并希望将其设置为HierarchicalDataTemplate的DataType.
XAML中的语法是什么?(我知道如何设置命名空间,我只需要语法
<HierarchicalDataTemplate DataType="{X:Type .....
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有菜单.我正在使用分层数据模板将其可视化:
<MenuItem Header="Main menu" ItemsSource="{Binding ApplicationMenu}" >
<MenuItem.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type tm:RMenuItem}"
ItemsSource="{Binding Path=ChildrenItems}">
<MenuItem Header="{Binding Name}" Command="{Binding RunOperationCommand}" />
</HierarchicalDataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
菜单看起来应该如此,但每个菜单项的命令都没有被触发!更多 - 它没有限制,可以在调试器中看到:ICommand属性的访问器从未被执行过.为什么会这样?
像往常一样工作完美:
<Menu>
<MenuItem Header="SomeHeader" Command="{Binding RunOperationCommand}"/>
<Menu>
Run Code Online (Sandbox Code Playgroud) 我试图让我的树视图按照它们是什么来组合类似项目的集合.为了保持通用性,我的对象层次结构可能如下所示:
现在我的TreeView显示这些对象与对象模型完全一样,但我想要做的是为每个对象类型插入一个TreeView节点,使它看起来像这样:
我在这里看到一个类似的问题,有人建议有两个单独的,HierarchicalDataTemplates所以我创建了一个'对象组#1'级别,其中包含一个带有类型列表的TreeView,但这真是笨拙,因为它是一个完整的单独的TreeView里面一些节点.我也一直在尝试使用a CollectionViewSource来过滤掉每个类别中的项目,但这对我来说并不是很好,因为我无法弄清楚如何显示它们.
我想我的问题归结为:我如何组成一个HierarchicalDataTemplate小组呢?如果有人能指出我正确的方向,我会非常感激.
我可以发布一些代码,如果有人想看,但我真的只是想弄清楚如何做我想要的,所以我的代码现在只是一个非常直接的数据绑定树视图.
我已经创建了一个DataTemplateSelector,它使用已知接口的集合进行初始化.如果传入选择器的项目实现其中一个接口,则返回关联的数据模板.
首先,这是有问题的ICategory接口......
public interface ICategory
{
ICategory ParentCategory { get; set; }
string Name { get; set; }
ICategoryCollection Subcategories { get; }
}
Run Code Online (Sandbox Code Playgroud)
这是基于基类或接口而不仅仅是特定具体类匹配的DataTemplateSelector ...
[ContentProperty("BaseTypeMappings")]
public class SubclassedTypeTemplateSelector : DataTemplateSelector
{
private delegate object TryFindResourceDelegate(object key);
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var frameworkElement = container as FrameworkElement;
foreach(var baseTypeMapping in BaseTypeMappings)
{
// Check if the item is an instance of, a subclass of,
// or implements the interface specified in BaseType
if(baseTypeMapping.BaseType.IsInstanceOfType(item))
{
// …Run Code Online (Sandbox Code Playgroud) c# wpf datatemplate hierarchicaldatatemplate datatemplateselector
我有一个wpf树视图,显示各种类型的节点和相应的图像,如文件夹图像.最初,树及其具有相应图像的节点按预期显示.但是,当扩展节点时,期望扩展节点的图像应交换为扩展图像.我正在尝试使用HierarchicalDataTemplate触发器进行设置.
触发器应该设置不同吗?
树看起来像:
(Folder Image) Solutions (SolutionsViewModel)
--(Solution Image) Solution 1 (Solution)
--(Solution Image) Solution 2 (Solution)
(Folder Image) Conventions (ConventionsViewModel)
Run Code Online (Sandbox Code Playgroud)
树视图中主节点的xaml(主题为空):
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Theme.xaml" />
</ResourceDictionary.MergedDictionaries>
<HierarchicalDataTemplate DataType="{x:Type vm:SolutionsViewModel}" ItemsSource="{Binding Items}">
<StackPanel Orientation="Horizontal">
<Image x:Name="nodeImg" Width="16" Height="16" Source="pack://siteOfOrigin:,,,/Resources/FolderClosed.bmp"/>
<TextBlock Margin="5,0,0,0" Text="{Binding Name}" />
</StackPanel>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding IsExpanded}" Value="True">
<Setter TargetName="nodeImg" Property="Source" Value="pack://siteOfOrigin:,,,/Resources//FolderOpen.bmp"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type sol:Solution}" ItemsSource="{Binding Items}">
<StackPanel Orientation="Horizontal">
<Image x:Name="treeImg" Width="16" Height="16" Source="pack://siteOfOrigin:,,,/Resources/SolutionClosed.bmp"/>
<TextBlock Margin="5,0,0,0" Text="{Binding Name}" />
</StackPanel>
<HierarchicalDataTemplate.Triggers> …Run Code Online (Sandbox Code Playgroud) 我想在TreeView中显示任意XML,扩展和折叠节点,显示元素名称和属性集及其值.我想我可以使用HierarchicalDataTemplate来做到这一点.
我已经看到使用HierarchicalDataTemplate显示任意XML 元素和文本节点的提示,如下所示:
<Window.Resources>
<HierarchicalDataTemplate x:Key="NodeTemplate">
<TextBlock x:Name="tbName" Text="?" />
<HierarchicalDataTemplate.ItemsSource>
<Binding XPath="child::node()" />
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
<Setter TargetName="tbName" Property="Text" Value="{Binding Path=Value}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
<Setter TargetName="tbName" Property="Text" Value="{Binding Path=Name}"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
<XmlDataProvider x:Key="xmlDataProvider">
</XmlDataProvider>
</Window.Resources>
....
<TreeView Name="treeView1"
ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=*}"
ItemTemplate= "{StaticResource NodeTemplate}"/>
Run Code Online (Sandbox Code Playgroud)
哪个效果很好.它显示每个元素的元素名称和文本.但我的XML使用属性来传递信息.模式很复杂,我没有正式的定义,所以现在我将它视为任意XML.
最简单的文档如下所示:
<c4soap name="GetVersionInfo" seq="" result="1">
<versions>
<version name="Director"
version="2.1.0.126418"
buildtype=""
builddate="Jun 1 2011" buildtime="14:52:43" />
<version name="MediaManager"
version="2.1.0.126418"
buildtype=""
builddate="Jun 1 2011"
buildtime="14:36:17" />
</versions>
</c4soap> …Run Code Online (Sandbox Code Playgroud) 美好的一天,
我在确定如何模板化以下TreeView项目布局时遇到了一些困难:

我有几个项目,SearchList,其中包含一个Search集合,其中包含DataSet的集合(排序,但不在此处).我遇到的困难是按照我想要的方式设置每个节点级别.我正在使用MVVM,并且TreeViews ItemsSource属性被设置为SearchListViewModels的ObservableCollection,后者又在对象树中一直包含我的对象.
我可以成功设置SearchList HierarchicalDataTemplate的样式以正确显示它们.我挂起的地方是SearchTerm节点样式.我希望DataSets在SearchTerm内容区域右侧的包装面板或统一网格(我还没有决定)中表示.我已经修改了一个TreeViewItem控件模板,以此方式表现,但是如果我在Search HierarchicalDataTemplate的ItemContainerStyle属性中设置它,它什么都不做.显示的所有内容都是搜索的内容.
<Style TargetType="{x:Type TreeViewItem}" x:Key="AlteredTreeViewItem">
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"
MinWidth="19" />
<ColumnDefinition Width="0.414*" />
<ColumnDefinition Width="0.586*"/>
</Grid.ColumnDefinitions>
<Border x:Name="Bd" HorizontalAlignment="Stretch"
Grid.Column="1" Grid.ColumnSpan="1" Background="#7F058956">
<ContentPresenter x:Name="PART_Header" Margin="10,0" />
</Border>
<WrapPanel x:Name="ItemsHost"
Grid.Column="2" IsItemsHost="True"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
<HierarchicalDataTemplate DataType="{x:Type local:SearchViewModel}" ItemsSource="{Binding MySearch.Custodians}" ItemContainerStyle="{StaticResource AlteredTreeViewItem}">
<TextBlock Text="{Binding MySearch.SearchName}" Foreground="Black" FontFamily="Arial" FontSize="16"/>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
当然,其他人的作品都有不同的风格,并且儿童用品的布局不同.任何人都有这样做的经验可以帮助我吗?
我有一个TreeView看起来像这样:
<TreeView Grid.Row="1" x:Name="InspectionResultsTreeView"
ItemsSource="{Binding Source={StaticResource InspectionTypeGroupViewSource}, Path=Groups}"
ItemTemplate="{StaticResource InspectionTypeGroupsTemplate}">
</TreeView>
Run Code Online (Sandbox Code Playgroud)
这ItemsSource是一个键入的资源,其名称为InspectionTypeGroupViewSource:
<CollectionViewSource x:Key="InspectionTypeGroupViewSource" Source="{Binding Results}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Inspection.InspectionType" />
<PropertyGroupDescription PropertyName="Inspection" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
Run Code Online (Sandbox Code Playgroud)
这个小东西的作用是采用ViewModel的Results属性:
private ObservableCollection<ICodeInspectionResult> _results;
public ObservableCollection<ICodeInspectionResult> Results
{
get { return _results; }
set { _results = value; OnPropertyChanged(); }
}
Run Code Online (Sandbox Code Playgroud)
...和组它在两个层面上-首先InspectionType,然后Inspection-结果是与检查类型,检查,再检查用独立结果的3层次结构.在这一点上,截图可能有助于可视化我猜:
因此,ItemTemplate的InspectionResultsTreeView是另一个键的资源,由名InspectionTypeGroupsTemplate-这是大胆的 "检查型"项目:
<HierarchicalDataTemplate x:Key="InspectionTypeGroupsTemplate"
DataType="{x:Type CollectionViewGroup}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource InspectionGroupsTemplate}">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" …Run Code Online (Sandbox Code Playgroud) wpf ×9
treeview ×5
c# ×3
xaml ×3
.net ×2
binding ×1
command ×1
data-binding ×1
datatemplate ×1
datatrigger ×1
itemspanel ×1
tooltip ×1
triggers ×1