WPF TreeViewItem没有从代码背后扩展

时间:2010-12-30 21:21:40

标签: wpf treeviewitem

我为TreeViewItem定义了以下样式:

   <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
                                                    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
                                                    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
                                                    <Setter Property="AllowDrop" Value="True" />                                                    
                                                    <Setter Property="Background" Value="Transparent"/>
                                                    <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                                                    <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                                                    <Setter Property="Padding"  Value="1,0,0,0"/>
                                                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                                                    <Setter Property="FocusVisualStyle"  Value="{StaticResource TreeViewItemFocusVisual}"/>
                                                    <Setter Property="Template">
                                                        <Setter.Value>
                                                            <ControlTemplate TargetType="{x:Type TreeViewItem}">
                                                                <Grid>
                                                                    <Grid.ColumnDefinitions>
                                                                        <ColumnDefinition MinWidth="19" Width="Auto"/>
                                                                        <ColumnDefinition Width="Auto"/>
                                                                        <ColumnDefinition Width="*"/>
                                                                    </Grid.ColumnDefinitions>
                                                                    <Grid.RowDefinitions>
                                                                        <RowDefinition Height="Auto"/>
                                                                        <RowDefinition/>
                                                                    </Grid.RowDefinitions>

                                                                    <!-- Connecting Lines -->
                                                                    <Rectangle x:Name="HorLn" Height="1" Stroke="#8888"  Margin="10,0,0,0" SnapsToDevicePixels="true"/>
                                                                    <Rectangle x:Name="VerLn" Width="1" Stroke="#8888" Grid.RowSpan="2" SnapsToDevicePixels="true"/>
                                                                    <ToggleButton x:Name="Expander"
                                                                                  Style="{StaticResource ExpandCollapseToggleStyle}"
                                                                                  IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
                                                                                  ClickMode="Press"/>
                                                                    <Border Name="Bd"
                                                                            Grid.Column="1"
                                                                            Background="{TemplateBinding Background}"
                                                                            BorderBrush="{TemplateBinding BorderBrush}"
                                                                            BorderThickness="{TemplateBinding BorderThickness}"
                                                                            Padding="{TemplateBinding Padding}">
                                                                        <ContentPresenter x:Name="PART_Header"
                                                                                  ContentSource="Header"
                                                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                                                                    </Border>
                                                                    <ItemsPresenter x:Name="ItemsHost"
                                                                            Grid.Row="1"
                                                                            Grid.Column="1"
                                                                            Grid.ColumnSpan="2"/>
                                                                </Grid>
                                                                <ControlTemplate.Triggers>

                                                                    <!-- This trigger changes the connecting lines if the item is the last in the list -->
                                                                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LineConverter}}" Value="true">
                                                                        <Setter TargetName="VerLn"
                                                                        Property="Height"
                                                                        Value="6"/>
                                                                        <Setter TargetName="VerLn"
                                                                        Property="VerticalAlignment"
                                                                        Value="Top"/>
                                                                    </DataTrigger>
                                                                    <Trigger Property="IsExpanded"
                                                                     Value="false">
                                                                        <Setter TargetName="ItemsHost"
                                                                        Property="Visibility"
                                                                        Value="Collapsed"/>
                                                                    </Trigger>
                                                                    <Trigger Property="HasItems"
                                                                     Value="false">
                                                                        <Setter TargetName="Expander"
                                                                        Property="Visibility"
                                                                        Value="Hidden"/>
                                                                    </Trigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="HasHeader"
                                                                               Value="false"/>
                                                                            <Condition Property="Width"
                                                                               Value="Auto"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="PART_Header"
                                                                        Property="MinWidth"
                                                                        Value="75"/>
                                                                    </MultiTrigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="HasHeader"
                                                                               Value="false"/>
                                                                            <Condition Property="Height"
                                                                               Value="Auto"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="PART_Header"
                                                                        Property="MinHeight"
                                                                        Value="19"/>
                                                                    </MultiTrigger>
                                                                    <Trigger Property="IsSelected"
                                                                     Value="true">
                                                                        <Setter TargetName="Bd"
                                                                        Property="Background"
                                                                        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                                                                    </Trigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="IsSelected"
                                                                               Value="true"/>
                                                                            <Condition Property="IsSelectionActive"
                                                                               Value="false"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="Bd"
                                                                        Property="Background"
                                                                        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                                                                    </MultiTrigger>
                                                                    <Trigger Property="IsEnabled"
                                                                     Value="false">
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                                                    </Trigger>
                                                                </ControlTemplate.Triggers>
                                                            </ControlTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </Style>

当代码后面的模型的IsExpanded属性设置为true时,我无法扩展TreeViewItem。但是,从用户界面扩展TreeViewItem时,模型IsExpanded属性会更改。我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

我有类似的代码工作,你上面的设置看起来很好。

    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />

更新模型中的PropertyChanged属性后,您是否提出了IsExpanded事件?