鼠标悬停问题

时间:2017-11-06 13:50:18

标签: c# wpf xaml triggers styles

我是XAML的新手,我正在设计一个包含嵌套选项卡控件的应用程序。最近我搜索了通过鼠标悬停和选择的触发器(选择=绿色,鼠标悬停=蓝色)更改标签标题,它确实有效。但我有两个问题。

  1. 我有一个嵌套标签,内部标签也跟随外部TabControl.Resource(对我来说没关系,它给了我统一标签)。

  2. 这个问题与鼠标悬停触发器有关:当我选择选项卡并且它被选中时变为绿色,只要我鼠标移动到任何控件,它就会在其网格内,TabHeader这是<TabControl Margin="0,0,0,0.2" TabStripPlacement="Left" Background="{x:Null}" BorderBrush="Gainsboro"> <!-- ******outter TAB*******--> <TabControl.Resources> <Style TargetType="TabItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem"> <Grid Name="TnrT1"> <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="10,2"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="TnrT1" Property="Background" Value="#FF7AB945"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="TnrT1" Property="Background" Value="#CC119EDA"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </TabControl.Resources> <TabItem x:Name="TnrMng" Height="136" VerticalAlignment="Top" HorizontalAlignment="Left" Width="105" Background="White"> <TabItem.Header> <StackPanel HorizontalAlignment="Center" Width="94" Height="116" VerticalAlignment="Center" Margin="0,1,-0.4,21.4"> <Image Source="Resource/mngp.png" Height="90" Margin="-2,0,-5.6,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="102" /> <TextBlock Height="28" RenderTransformOrigin="0.498,0.913" VerticalAlignment="Center" HorizontalAlignment="Center" Width="84" FontWeight="Normal" FontSize="16" Margin="10,0,0.4,0" FontFamily="Tw Cen MT Condensed Extra Bold">مدیرت استاد</TextBlock> </StackPanel> </TabItem.Header> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox x:Name="inst_inst_search_txt_Copy" Margin="10,58,0,0" TextWrapping="Wrap" FontWeight="Normal" VerticalContentAlignment="Center" Height="22" Controls:TextBoxHelper.Watermark="جستجو استاد" VerticalAlignment="Top" HorizontalAlignment="Left" Width="153" HorizontalContentAlignment="Center"/> <Image x:Name="inst_search_png_Copy" Margin="168,58,0,0" Stretch="Fill" FlowDirection="RightToLeft" HorizontalAlignment="Left" Height="24" VerticalAlignment="Top" Width="29"> <Image.Source> <BitmapImage UriSource="Resource/search.png"/> </Image.Source> </Image> <ComboBox x:Name="tnr_search_filter_combo" HorizontalAlignment="Left" Margin="77,10,0,0" VerticalAlignment="Top" Width="86" FontSize="8" Height="22"> <ComboBoxItem Content="همه موارد"/> <ComboBoxItem Content="کد شناسه"/> <ComboBoxItem Content="نام"/> <ComboBoxItem Content="شماره ملی"/> <ComboBoxItem Content="شماره تماس"/> <ComboBoxItem Content="آدرس"/> <ComboBoxItem Content="پست الکترونیک"/> </ComboBox> <ListView x:Name="tnr_tnr_search_lst" HorizontalAlignment="Left" Margin="10,113,0,24.4" Width="175"> <ListView.View> <GridView> <GridViewColumn Header="استاد" HeaderStringFormat="" Width="160"/> </GridView> </ListView.View> </ListView> <!-- ******inner TAB*****--> <TabControl Margin="190,10,0.2,0.4"> <TabItem Header="TabItem"> <Grid Background="#FFE5E5E5"/> </TabItem> <TabItem Header="TabItem"> <Grid Background="#FFE5E5E5"/> </TabItem> </TabControl> <!-- ***inner TAB***--> </Grid> </TabItem> <TabItem Margin="0,7,-0.4,-66.4" Width="105" Height="136"> <TabItem.Header> <StackPanel HorizontalAlignment="Center" Width="94" Height="116" VerticalAlignment="Center" Margin="0,1,-0.4,21.4"> <Image Source="Resource/addp.png" Height="90" Margin="-2,0,-5.6,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="102" /> <TextBlock Height="28" RenderTransformOrigin="0.498,0.913" VerticalAlignment="Center" HorizontalAlignment="Center" Width="84" FontWeight="Normal" FontSize="16" Margin="10,0,0.4,0" FontFamily="Tw Cen MT Condensed Extra Bold">ثبت استاد</TextBlock> </StackPanel> </TabItem.Header> <Grid> <ListBox HorizontalAlignment="Left" Height="366" Margin="49,99,0,0" VerticalAlignment="Top" Width="533"/> </Grid> </TabItem> </TabControl> <!--******Outter TAB*****--> 选中(并应保持绿色)跟随鼠标悬停触发器并变为蓝色。

  3. 这是我的xaml:

    message.channel.send(

    这些是显示第二个问题的图像:

    when mouse is not over any controls when mouse is over some controls

1 个答案:

答案 0 :(得分:1)

让我先谈谈第二期。定义TabItem样式的方式,当鼠标位于TabItem(包括TabItem&#39;标题和内容)时,背景变为蓝色。因此,如果您希望仅在未选择项目时执行更改,请替换此触发器:

<Trigger Property="IsMouseOver" Value="True">
    <Setter TargetName="TnrT1" Property="Background" Value="#CC119EDA"/>
</Trigger>

使用MultiTrigger:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Property="IsSelected" Value="False"/>
    </MultiTrigger.Conditions>
    <Setter TargetName="TnrT1" Property="Background" Value="#CC119EDA"/>
</MultiTrigger>

现在是第一个问题(这不是问题,因为你伤心,但仍然)。定义TabItem样式的方式(在TabControl的资源中),它将应用于该TabControl中的所有TabItems(包括嵌套TabControls中的TabItems - 代码注释中的内部TAB)。这是因为它没有明确的密钥,因此它适用于TabItem类型的所有控件。为避免这种情况,请为您的样式添加一个键x:Key="MyTabItemStyle"。然后将该样式仅应用于您想要的TabItems,因此对于外部TabItems,您可以设置Style="{StaticResource MyTabItemStyle}"