阻止TabItem事件触发WPF

时间:2018-01-29 07:07:33

标签: wpf xaml

    <TabControl x:Name="tabControl" TabStripPlacement="Top"  BorderBrush="White"  FontSize="14" Grid.ColumnSpan="2" HorizontalAlignment="Left" Height="98" Margin="0,2,0,0" VerticalAlignment="Top" Width="992" FontFamily="Segoe UI">
        <TabControl.Resources>
            <Style TargetType="TabItem">
                <Style.Triggers>
                    <Trigger Property="TabItem.IsSelected" Value="True">
                        <Setter Property="TabItem.Foreground" Value="#FF0090D3"/>
                        <Setter Property="TabItem.FontSize" Value="14"/>
                        <Setter Property="TabItem.FontFamily" Value="Segoe Ui SemiBold"/>
                    </Trigger>
                </Style.Triggers>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TabItem">
                            <Border Name="Border" BorderThickness="0,0,0,0" BorderBrush="White" Background="White"  CornerRadius="13,13,13,13" Margin="1,0">
                                <ContentPresenter x:Name="ContentSite"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Center"
                                    ContentSource="Header"
                                    Margin="10,2"/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <EventTrigger RoutedEvent="MouseEnter">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ParallelTimeline>
                                                <ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="(Border.Background).Color" From="White" To="LightGray" Duration="0:0:0.2"/>
                                            </ParallelTimeline>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <EventTrigger RoutedEvent="MouseLeave">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ParallelTimeline>
                                                <ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="(Border.Background).Color" From="LightGray" To="White" Duration="0:0:0.2"/>
                                            </ParallelTimeline>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TabControl.Resources>
        <TabItem Width="190" Visibility="Hidden" />
        <TabItem Height="25" IsSelected="True" Width="63" Header="Home">
            <Canvas>
                <Rectangle x:name="rect1" Fill="#FFF4F4F5" Height="59" Width="58" Canvas.Top="3" Canvas.Left="1">
                    <Rectangle.Style>
                        <Style TargetType="Rectangle">
                            <Style.Triggers>
                                <EventTrigger RoutedEvent="MouseEnter">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimation Storyboard.TargetProperty="Fill.Color" To="LightGray" Duration="0:0:0.2"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                                <EventTrigger RoutedEvent="MouseLeave">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimation Storyboard.TargetProperty="Fill.Color" To="White" Duration="0:0:0.2"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>             
            </Canvas>
        </TabItem>
        <TabItem Width="63" Header="Tools"/>
        <TabItem Width="76" Header="Add-ons" />
    </TabControl>

当鼠标悬停在标题上时,代码允许我更改标签标题颜色。但是,问题是......当鼠标位于标题项内的内容时,两者的MouseEnter事件TabItem和内容fires.Which导致:如果我将鼠标悬停在内容(例如,我正在使用的矩形)上,则会触发内容/控件的MouseEnter事件。但它也会触发'MouseEnter 'tabItem的事件...所以tabItem / TabHeader即使我没有将鼠标悬停在标题/ TabItem上而不是将鼠标悬停在标题内的控件/内容上时,它也会显示它的颜色...我如何防止这种情况? / p>

更新

我找到了这段代码:

 <MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true" />
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>

来自here。但我应该把它放在哪里?

1 个答案:

答案 0 :(得分:0)

该死!!这真的很容易!刚改变:

   <ControlTemplate.Triggers>
                            <EventTrigger RoutedEvent="MouseEnter">

致:

    <ControlTemplate.Triggers>
                            <EventTrigger SourceName="ContentSite" RoutedEvent="MouseEnter">