代码之家  ›  专栏  ›  技术社区  ›  jr13216

基于标记属性的WPF TreeView图像

  •  0
  • jr13216  · 技术社区  · 6 年前

    我正在尝试创建一个WPF treeview,它应该根据treeview的 Tag property 。我希望此属性可以与此属性一起使用,因为我将让PowerShell脚本在执行期间动态创建TreeNode。

    这是我在WPF应用程序中使用的XAML:

    <TreeView Name="MainTreeview1" Margin="10,248,10,151" Padding="-2,1,1,1">
      <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
          <Setter Property="HeaderTemplate">
            <Setter.Value>
              <DataTemplate>
                <StackPanel Orientation="Horizontal">
                  <Image Name="TreeNodeIMG" Width="20" Height="20" Stretch="Fill">
                    <Image.Style>
                      <Style TargetType="{x:Type Image}">
                        <Style.Triggers>
                          <DataTrigger Binding="{Binding Tag}" Value="0">
                            <Setter Property="Source" Value="images\ImageForTag0.png"/>
                          </DataTrigger>
                          <DataTrigger Binding="{Binding Tag}" Value="1">
                            <Setter Property="Source" Value="images\ImageForTag1.png"/>
                          </DataTrigger>
                        </Style.Triggers>
                      </Style>
                    </Image.Style>
                  </Image>
                  <TextBlock VerticalAlignment="Center" Text="{Binding}" Margin="5,0" />
                </StackPanel>
              </DataTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </TreeView.Resources>
    
      <TreeViewItem Header="TestWithIMG1" Tag="0"/>
      <TreeViewItem Header="TestWithIMG2" Tag="1"/>
    
    </TreeView>
    

    如果treeviewitem模板可以做到这一点,我也可以,只要我可以轻松区分TreeNode。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ASh aminescm    6 年前

    这是可能的,但您需要以不同的方式定义绑定源,因为标记不是DataContext的属性,而是TreeViewItem属性

    <Style.Triggers>
      <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" 
                   Value="0">
        <Setter Property="Source" Value="images\ImageForTag0.png"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=TreeViewItem}}" 
                   Value="1">
        <Setter Property="Source" Value="images\ImageForTag1.png"/>
      </DataTrigger>
    </Style.Triggers>