WPF中出现意外的样式更改 [英] Unexpected style changes in WPF

查看:135
本文介绍了WPF中出现意外的样式更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个TabControl,每个TabItem都有一个框架。为简单起见,我在下面仅列出了一个TabItem。每当我将鼠标移动到框架中的任何控件上时,TabMtrol中选定的TabItem上都会发生IsMouseOver样式更改并更改为灰色。我做错了什么?



更新:我从样式中分离了ControlTemplate,并设置了按钮的模板以使用ControlTemplate而没有样式。这似乎是ControlTemplate的一个问题,因为它仍然会发生。



 < ;   TabControl    保证金 < span class =code-keyword> =  10    BorderThickness   =  0    TabStripPlacement   =     SnapsToDevicePixels   =  True   >  
< TabItem 标题 = 常规 样式 = {DynamicResource TopItem} 标记 = 热门 >

< Frame NavigationUIVisibility = 隐藏 来源 = < span class =code-keyword> Settings.xaml / >

< / TabItem >

< / TabControl >









 <  样式    TargetType   =  TabItem      X:键  =  TopItem >  
< Style.Triggers >
< 触发器 属性 = IsSelected < span class =code-attribute> = True >

< Setter 属性 = 前景 = 白色 / >
< / Trigger >
< / Style.Triggers >
< Setter 属性 = 背景 = 透明 / >
< Setter 属性 = FontFamily = 格鲁吉亚 / > ;
< Setter 属性 = FontSize = 14 / & gt;

< Setter 属性 = 模板 >
< Setter.Value >
< ControlTemplate TargetType = {x:Type TabItem} >
< 网格 x:名称 = 面板 >
< 边框 x:名称 = ItemBorder BorderThickness = 1,0,1,0 BorderBrush = 黑色 填充 = 10 宽度 = 150 >

< ContentPresenter x:名称 = ContentSite

VerticalAlignment = 中心

Horizo​​ntalAlignment = 中心

ContentSource = 标题

/ < span class =code-keyword>>
< / Border >

< / Grid >
< ControlTemplate.Triggers >
< 触发器 < span class =code-attribute> 属性 = 标签 = 热门 >
< Setter TargetName = ItemBorder 属性 = BorderThickness = 1,1,1,0 / >
<! - < Setter TargetName =ItemBorderProperty =CornerRadiusValue = 5,5,0,0/> - >

< / Trigger >
< 触发器 属性 = 标记 = 底部 >
< Setter TargetName = ItemBorder 属性 = BorderThickness = 1,0,1,1 / >
<! - < Setter TargetName =ItemBorderProperty =CornerRadiusValue =0,0,5,5/> - >

< / Trigger >
< span class =code-keyword>< 触发器 Property = IsSelected = True >
< Setter TargetName = ItemBorder 属性 = 背景 = < span class =code-keyword>#FF124E8D / >
< / Trigger >
< 触发器 属性 = IsMouseOver = True >
< Setter < span class =code-attribute> TargetName = ItemBorder 属性 = 背景 = 灰色 / >
< / Trigger >
< < span class =code-leadattribute> / ControlT emplate.Triggers >
< / ControlTemplate >
< / Setter.Value >
< < span class =code-leadattribute> / Setter >
< / Style >

解决方案

由于某种原因,我不得不添加SourceName =ContentSite。



 <  触发器    property   =  IsMouseOver    value   =  True    sourcename   =  ContentSite >  
< setter targetname = ItemBorder property = 背景 value = 灰色 / >
< / trigger >


I have a TabControl that has a frame in each TabItem. I only listed one TabItem below for simplicity. Whenever I move my mouse over any control in the frame, the IsMouseOver style change occurs on the selected TabItem in the TabControl and changes to Gray. What am I doing wrong?

Update: I seperated the ControlTemplate from the style and set the template of the button to use the ControlTemplate and no styling. It seems to be a problem with the ControlTemplate, because it still happens.

<TabControl Margin="10" BorderThickness="0" TabStripPlacement="Left" SnapsToDevicePixels="True" >
         <TabItem Header="General"  Style="{DynamicResource TopItem}"  Tag="Top" >

             <Frame NavigationUIVisibility="Hidden"   Source="Settings.xaml" />

         </TabItem>

     </TabControl>





<Style TargetType="TabItem"  x:Key="TopItem">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">

                <Setter Property="Foreground" Value="White" />
            </Trigger>
        </Style.Triggers>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="FontFamily" Value="Georgia"/>
        <Setter Property="FontSize" Value="14"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid x:Name="Panel" >
                        <Border x:Name="ItemBorder" BorderThickness="1,0,1,0"     BorderBrush="Black"  Padding="10" Width="150">

                            <ContentPresenter x:Name="ContentSite"

        							VerticalAlignment="Center"

        							HorizontalAlignment="Center"

        							ContentSource="Header"

        							/>
                        </Border>

                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Tag" Value="Top">
                            <Setter TargetName="ItemBorder" Property="BorderThickness" Value="1,1,1,0" />
                            <!--<Setter TargetName="ItemBorder" Property="CornerRadius" Value="5,5,0,0" />-->

                        </Trigger>
                        <Trigger Property="Tag" Value="Bottom">
                            <Setter TargetName="ItemBorder" Property="BorderThickness" Value="1,0,1,1" />
                            <!--<Setter TargetName="ItemBorder" Property="CornerRadius" Value="0,0,5,5" />-->

                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="ItemBorder" Property="Background" Value="#FF124E8D" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="ItemBorder" Property="Background" Value="Gray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

解决方案

I had to add SourceName="ContentSite" for some reason.

<trigger property="IsMouseOver" value="True" sourcename="ContentSite">
               <setter targetname="ItemBorder" property="Background" value="Gray" />
           </trigger>


这篇关于WPF中出现意外的样式更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆