代码之家  ›  专栏  ›  技术社区  ›  juergen d

WPF EventTrigger不总是触发

  •  3
  • juergen d  · 技术社区  · 6 年前

    我定制了一个WPF树视图,外观如下:

    treeview

    我定义了一个EventTrigger来对点击做出反应:

    <TreeView>            
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonUp">
                <i:InvokeCommandAction Command="{Binding OpenPartListCommand}" CommandParameter="{Binding ElementName=PartsTreeView, Path=SelectedItem}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    
        <TreeView.Resources>
            <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="TreeViewItem" >
                                <Grid Margin="6,4">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
    
                                    <Border Name="Bd" 
                                            Background="{Binding Background}"
                                            BorderBrush="Black" 
                                            BorderThickness="1.2" 
                                            CornerRadius="0"
                                            MinHeight="35"
                                            Padding="5"     
                                            SnapsToDevicePixels="True"
                                            Margin="{Binding Path=Margin}" >
                                        <Grid>                                            
                                            <Expander Name="Exp" IsExpanded="{TemplateBinding TreeViewItem.IsExpanded}">
                                                <Expander.Header>                                                   
                                                    <ContentPresenter ContentSource="Header"                                                                       
                                                                      Width="{Binding Path=ActualWidth, ElementName=PartsTreeView, Mode=OneWay, Converter={StaticResource MathConverter}, ConverterParameter=@VALUE-80}"  />
    
                                                </Expander.Header>                                                
                                                <ItemsPresenter />
                                            </Expander>
    
                                            <ContentPresenter Name="CntPres"
                                                        ContentSource="Header"
                                                        HorizontalAlignment="Center"
                                                        VerticalAlignment="Center"
                                                        Visibility="Collapsed"                                                         
                                                        Width="{Binding Path=ActualWidth, ElementName=PartsTreeView, Mode=OneWay, Converter={StaticResource MathConverter}, ConverterParameter=@VALUE-80}"  
                                                        />              
                                        </Grid>
                                    </Border>
                                </Grid>
    
                                <ControlTemplate.Triggers>
    
                                    <Trigger Property="TreeViewItem.HasItems" Value="false">
                                        <Setter 
                                              TargetName="Exp" 
                                              Property="Visibility" 
                                              Value="Collapsed" />
                                        <Setter 
                                              TargetName="CntPres" 
                                              Property="Visibility" 
                                              Value="Visible" />            
                                    </Trigger>
    
    
                                    <Trigger Property="TreeViewItem.Name" Value="IsSpecial">
                                        <Setter Property="Background" TargetName="Bd" Value="#FFC3AF"/>
                                    </Trigger>
                                    <Trigger Property="TreeViewItem.Name" Value="IsNotSpecial">
                                        <Setter Property="Background" TargetName="Bd" Value="#8BADC5"/>
                                    </Trigger>
    
    
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" TargetName="Bd" Value="#FFF0EA"/>
                                    </Trigger>
                                    <Trigger Property="IsFocused" Value="True">
                                        <Setter Property="Background" TargetName="Bd" Value="#FFF0EA"/>
                                    </Trigger>
                                    <Trigger Property="IsSelected" Value="True">
                                        <Setter TargetName="Bd" Property="Background" Value="#FFF0EA"/>
                                    </Trigger>
    
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
    
                    <Setter Property="ItemsPanel">
                        <Setter.Value>
                            <ItemsPanelTemplate>
                                <ItemsPanelTemplate.Resources>                                    
                                </ItemsPanelTemplate.Resources>
                                <StackPanel  IsItemsHost="True"   />
                            </ItemsPanelTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
        </TreeView.Resources>
    </TreeView>
    

    问题是,单击根元素“Ausfhrungsvorschrift”只会扩展树,但不会触发事件。它在单击子元素时激发,在边框内单击时激发。但是头部没有发射任何东西。

    1 回复  |  直到 6 年前
        1
  •  6
  •   juergen d    6 年前

    尝试为 Expanded Collapsed 事件到 Expander 模板中的元素:

    <Expander Name="Exp" IsExpanded="{TemplateBinding TreeViewItem.IsExpanded}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Expanded">
                <i:InvokeCommandAction Command="{Binding DataContext.OpenPartListCommand, RelativeSource={RelativeSource AncestorType=TreeView}}" 
                                       CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}}" />
            </i:EventTrigger>
            <i:EventTrigger EventName="Collapsed">
                <i:InvokeCommandAction Command="{Binding DataContext.OpenPartListCommand, RelativeSource={RelativeSource AncestorType=TreeView}}" 
                                       CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem}}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Expander.Header>
            <ContentPresenter ContentSource="Header" />
        </Expander.Header>
        <ItemsPresenter />
    </Expander>