0

私は階層的なツリービューを持っており、各アイテムには以下で構成される複雑なエンティティが含まれています。

境界線-チェックボックス-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>
4

1 に答える 1

1
  1. TreeViewリソースの境界線のHierarchicalDataTemplateとStyleの両方を移動します。StaticResource OpacityOnDisabled(を正しく解決するために、最初にスタイルを設定します)。

  2. 境界線のスタイルを変更したいので、チェックボックスにスタイルを適用しても意味がありません。Style="{StaticResource OpacityOnDisabled}"CheckBoxからBorder要素に移動します。スタイルの正しいタイプを設定し、DataTriggerの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>
于 2012-07-19T10:59:17.807 に答える