HierarchicalDataTemplate绑定

时间:2012-07-19 08:47:21

标签: wpf triggers hierarchicaldatatemplate

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

边界   - 复选框   - TextBlock

我想在复选框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>

1 个答案:

答案 0 :(得分:1)

  1. 在TreeView资源中为边框移动HierarchicalDataTemplate和Style。 (样式优先,以便StaticResource OpacityOnDisabled正确解析)。

  2. 您想要更改边框的样式,因此无法在复选框上应用样式。将Style="{StaticResource OpacityOnDisabled}"从CheckBox移动到Border元素。设置样式的正确类型,并为DataTrigger将bindinig更改为Binding="{Binding ElementName=treeViewItemCheckbox, Path=IsChecked}"

  3. 最后你应该有类似的东西,它应该做你想要的: 的结果:

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