Wpf HierarchycalDataTemplate绑定

Wpf HierarchycalDataTemplate绑定,wpf,triggers,hierarchicaldatatemplate,Wpf,Triggers,Hierarchicaldatatemplate,我有一个分层树状视图,每个项目都包含一个复杂的实体,包括: 边界 --复选框 --文本块 每当复选框IsEnabled属性设置为“False”时,我想更改边框的不透明度 这就是我所拥有的: <HierarchicalDataTemplate DataType="{x:Type sd:LegendTreeViewItem}" ItemsSource="{Binding Path=SubSensors}"> <Border x:Na

我有一个分层树状视图,每个项目都包含一个复杂的实体,包括:

边界 --复选框 --文本块

每当复选框IsEnabled属性设置为“False”时,我想更改边框的不透明度

这就是我所拥有的:

 <HierarchicalDataTemplate DataType="{x:Type sd:LegendTreeViewItem}" ItemsSource="{Binding Path=SubSensors}">
                        <Border x:Name="treeViewItemBorder" Height="24" Margin="3 3 3 3" Width="350" Background="{Binding Path=Color}" CornerRadius="8 8 8 8">
                            <StackPanel Orientation="Horizontal">
                                <CheckBox  x:Name="treeViewItemCheckbox" Margin="5 5 5 5" Click="CheckBox_Click" IsChecked="{Binding IsChecked}" VerticalAlignment="Center" IsEnabled="{Binding Enabled}"  Style="{StaticResource OpacityOnDisabled}"/>
                                <TextBlock Height="Auto" FontFamily="Tahoma" FontWeight="Bold" Foreground="Black" HorizontalAlignment="Left" Text="{Binding Path=Name}" 
                                           VerticalAlignment="Center" ToolTip="{Binding Path=Name}"/>
                            </StackPanel>  </Border>
                    </HierarchicalDataTemplate>

    <TreeView x:Name="legendTypeTree" Grid.Row="1" Foreground="White" ItemsSource="{Binding  ElementName=uc, Path=TypeItemsSource}">
                            <TreeView.Resources>
                                <Style x:Key="OpacityOnDisabled" TargetType="{Binding RelativeSource={RelativeSource AncestorType=Border}}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsEnabled}" Value="False">
                                            <Setter Property="Border.Opacity" Value="0.3"/>
                                            <Setter Property="Border.Background" Value="White"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TreeView.Resources>
                        </TreeView>

  • 在TreeView资源中移动边框的HierarchycalDataTemplate和样式。(首先设置样式,以便正确解决
    StaticResource OpacityOnDisabled

  • 您希望更改边框的样式,因此在复选框上应用样式是没有意义的。将
    Style=“{StaticResource OpacityOnDisabled}”
    从复选框移动到边框元素。设置正确的样式类型,并将数据触发器的bindinig更改为
    Binding=“{Binding ElementName=treeViewItemCheckbox,Path=IsChecked}”

  • 最后,你应该有这样的东西,可以做你想做的事: 结果:

    <TreeView
        x:Name="legendTypeTree"
        Grid.Row="1"
        Foreground="White"
        ItemsSource="{Binding  ElementName=uc, Path=TypeItemsSource}">
        <TreeView.Resources>
            <Style x:Key="OpacityOnDisabled" TargetType="{x:Type Border}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=treeViewItemCheckbox, Path=IsChecked}" Value="False">
                        <Setter Property="Border.Opacity" Value="0.3"/>
                        <Setter Property="Border.Background" Value="White"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
            <HierarchicalDataTemplate DataType="{x:Type sd:LegendTreeViewItem}" ItemsSource="{Binding Path=SubSensors}">
                <Border
                    x:Name="treeViewItemBorder"
                    Height="24"
                    Margin="3 3 3 3"
                    Width="350"
                    Background="{Binding Path=Color}"
                    CornerRadius="8 8 8 8"
                    Style="{StaticResource OpacityOnDisabled}">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox
                            x:Name="treeViewItemCheckbox"
                            Margin="5 5 5 5"
                            Click="CheckBox_Click"
                            IsChecked="{Binding IsChecked}"
                            VerticalAlignment="Center"
                            IsEnabled="{Binding Enabled}" />
                        <TextBlock
                            Height="Auto"
                            FontFamily="Tahoma"
                            FontWeight="Bold"
                            Foreground="Black"
                            HorizontalAlignment="Left"
                            Text="{Binding Path=Name}"
                            VerticalAlignment="Center"
                            ToolTip="{Binding Path=Name}"/>
                    </StackPanel>
                </Border>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>