标签: hierarchicaldatatemplate

WPF工具提示绑定

我只有两个星期的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)

谢谢.

data-binding wpf tooltip hierarchicaldatatemplate

8
推荐指数
3
解决办法
3万
查看次数

使用带有 HierarchicalDataTemplate 的 CollectionViewSource

您将如何将 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)

wpf hierarchicaldatatemplate collectionviewsource

8
推荐指数
1
解决办法
3617
查看次数

如何在HierarchicalDataTemplate的DataType属性中引用泛型类型?

我有一个类,MyClass<MyObject>并希望将其设置为HierarchicalDataTemplate的DataType.

XAML中的语法是什么?(我知道如何设置命名空间,我只需要语法

<HierarchicalDataTemplate DataType="{X:Type .....
Run Code Online (Sandbox Code Playgroud)

.net wpf xaml hierarchicaldatatemplate

7
推荐指数
2
解决办法
6124
查看次数

命令绑定在分层数据模板中

我的应用程序中有菜单.我正在使用分层数据模板将其可视化:

    <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)

.net binding command hierarchicaldatatemplate

7
推荐指数
1
解决办法
9598
查看次数

在WPF TreeView中对子对象进行分组

我试图让我的树视图按照它们是什么来组合类似项目的集合.为了保持通用性,我的对象层次结构可能如下所示:

  • 对象
    • 对象组#1
      • 项目#1(类型'A')
      • 项目#2(类型'A')
      • 项目#3(类型'B')
      • 项目#4(类型'B')

现在我的TreeView显示这些对象与对象模型完全一样,但我想要做的是为每个对象类型插入一个TreeView节点,使它看起来像这样:

  • 对象
    • 对象组#1
      • A型
        • 项目#1
        • 项目#2
      • B型
        • 项目#3
        • 项目#4

我在这里看到一个类似的问题,有人建议有两个单独的,HierarchicalDataTemplates所以我创建了一个'对象组#1'级别,其中包含一个带有类型列表的TreeView,但这真是笨拙,因为它是一个完整的单独的TreeView里面一些节点.我也一直在尝试使用a CollectionViewSource来过滤掉每个类别中的项目,但这对我来说并不是很好,因为我无法弄清楚如何显示它们.

我想我的问题归结为:我如何组成一个HierarchicalDataTemplate小组呢?如果有人能指出我正确的方向,我会非常感激.

我可以发布一些代码,如果有人想看,但我真的只是想弄清楚如何做我想要的,所以我的代码现在只是一个非常直接的数据绑定树视图.

c# wpf treeview xaml hierarchicaldatatemplate

7
推荐指数
2
解决办法
9971
查看次数

当从DataTemplateSelector显式返回DataTemplate时,为什么DataTemplate不能绑定到接口?

我已经创建了一个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

7
推荐指数
1
解决办法
761
查看次数

设置WPF树视图触发器以在展开时显示不同的图像

我有一个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)

wpf treeview triggers datatrigger hierarchicaldatatemplate

6
推荐指数
2
解决办法
2万
查看次数

如何使用HierarchicalDataTemplate显示XML元素和属性?

我想在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)

wpf treeview hierarchicaldatatemplate

6
推荐指数
1
解决办法
5233
查看次数

将HierarcicalDataTemplates与TreeViewItem控件模板结合使用

美好的一天,

我在确定如何模板化以下TreeView项目布局时遇到了一些困难: TreeView项目布局样机

我有几个项目,SearchList,其中包含一个Search集合,其中包含DataSet的集合(排序,但不在此处).我遇到的困难是按照我想要的方式设置每个节点级别.我正在使用MVVM,并且TreeViews ItemsSource属性被设置为SearchListViewModels的ObservableCollection,后者又在对象树中一直包含我的对象.

我可以成功设置SearchList HierarchicalDataTemplate的样式以正确显示它们.我挂起的地方是SearchTerm节点样式.我希望DataSets在SearchTerm内容区域右侧的包装面板或统一网格(我还没有决定)中表示.我已经修改了一个TreeViewItem控件模板,以此方式表现,但是如果我在Search HierarchicalDataTemplate的ItemContainerStyle属性中设置它,它什么都不做.显示的所有内容都是搜索的内容.

我的Altered TreeViewItem模板

<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)

当然,其他人的作品都有不同的风格,并且儿童用品的布局不同.任何人都有这样做的经验可以帮助我吗?

wpf treeview hierarchicaldatatemplate itemspanel

6
推荐指数
1
解决办法
3772
查看次数

什么是具有CollectionViewGroup分组的惯用XAML TreeView?

我有一个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层次结构.在这一点上,截图可能有助于可视化我猜:

Rubberduck 2.0 Code Inspections工具窗口

因此,ItemTemplateInspectionResultsTreeView是另一个键的资源,由名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)

c# wpf treeview xaml hierarchicaldatatemplate

6
推荐指数
1
解决办法
136
查看次数