欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF中的Style

程序员文章站 2022-03-07 14:21:12
...
  1. 属性样式:直接通过UI的属性设置样式
    <TextBox Text="textbox" Width="200" Height="100" Margin="40,40,40,40" HorizontalAlignment="Center"VerticalAlignment="Top" Background="SkyBlue" FontSize="36"/>

     

  2. 内联样式:通过Style节点来设置样式
    <TextBlock Cursor="Hand" HorizontalAlignment="Left" Height="30" TextWrapping="Wrap" FontSize="30"  Text="×"  Width="20">
                    <TextBlock.Style>
                        <Style TargetType="TextBlock">
                            <Setter Property="Foreground" Value="SlateGray"></Setter>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True" >
                                    <Setter Property="Foreground" Value="Maroon"></Setter>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
          </TextBlock>
    

     

  3. 引用样式:定义资源来引用样式,有页面级样式和应用程序级样式
    <!--页面级样式-->
        <UserControl.Resources>
            <Style TargetType="Button">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True" >
                        <Setter Property="Background" Value="#FFBADDE9"></Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
    </UserControl.Resources>
    

    页面级样式定义在页面的资源中,作用范围是当前页面。

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:Client.Resources.Styles">   
        <Style  TargetType="DataGridRow">
            <!--定义资源字典-->
            <Style.Triggers>
                <!--隔行换色-->
                <Trigger Property="AlternationIndex" Value="0" >
                    <Setter Property="Background" Value="#FFF1F1F1" />
                </Trigger>
                <Trigger Property="AlternationIndex" Value="1" >
                    <Setter Property="Background" Value="#FFF1F1F1" />
                </Trigger>
                <!--鼠标移出改变表格背景色、字体大小、前景色-->
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#FFBADDE9"/>
                    <Setter Property="FontSize" Value="20"></Setter>
                    <Setter Property="Foreground" Value="White"/>
                </Trigger>
                <!--选择行改变表格颜色-->
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="#FFBADDE9"/>
                    <Setter Property="FontSize" Value="20"></Setter>
                    <Setter Property="Foreground" Value="White"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>
    

    定义资源字典再调用在应用中(也可以直接写在应用程序中),可在整个应用中响应该样式

    <Application x:Class="Client.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:Client"
                 StartupUri="LogInWindow.xaml">
        <Application.Resources>
            <!--合并资源资源字典到应用程序-->
            <!--Resource Dictionary –资源字典-->
            <!--所有的资源项在最终都会被整合到Resource Dictionary中的,也就是说无论是FrameworkElement的Resources,还是Window的Resources,还是Application的Resources,还是特定的ResourceDictionary中定义的resources在整个应用编译执行的时候实际上他们都在一起的作为可遍历集合共同存在于一个相对会话空间内的。 我们也提到过Resource的key是可以被允许有相同的,这样在遍历不同相对地址的Resource Dictionary时会根据StaticResource或者DynamicResource的lookup behavior来确定哪个有效。通常为了维护和灵活性的考虑,我们通常会将Resource Dictionary文件分成好几个,但在某些场合下我们只需要用其中某些资源,那么我么可以将资源从几个独立的文件中提取并合并.-->
            <ResourceDictionary>
                <!--给应用程序添加默认资源:其实就是将默认的Resource Dictionary加入到Application的全局Resource里边。-->
                <ResourceDictionary.MergedDictionaries>
                    <!--封装好的公共样式-->
                    <ResourceDictionary Source="Resources/Styles/PublicDictionary.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>
    

     

  4. 样式优先级:样式的显示也是有优先级的,属性样式 > 引用样式 > 内联样式