首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HierarchicalDataTemplate绑定

HierarchicalDataTemplate绑定
EN

Stack Overflow用户
提问于 2012-07-19 16:47:21
回答 1查看 1.3K关注 0票数 0

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

边框--复选框-- TextBlock

每当checkbox IsEnabled属性设置为"False“时,我希望更改边框的不透明度。

这就是我所拥有的:

代码语言:javascript
复制
 <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 18:59:18

  1. 在TreeView资源中移动边框的HierarchicalDataTemplate和样式。(首先设置样式以便StaticResource OpacityOnDisabled正确解析)。
  2. 您希望更改边框的样式,因此在复选框上应用样式是没有意义的。将边框从CheckBox元素移动到Style="{StaticResource OpacityOnDisabled}"元素。设置正确的样式类型,并将DataTrigger的绑定更改为Binding="{Binding ElementName=treeViewItemCheckbox, Path=IsChecked}"

最后,您应该得到如下内容,它应该可以执行您想要的操作:Result:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11557111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档