WPF资源字典与资源封装

Resource Dictionary –资源字典

所有的资源项在最终都会被整合到Resource Dictionary中的,也就是说无论是FrameworkElementResources,还是WindowResources,还是ApplicationResources,还是特定的ResourceDictionary中定义的resources在整个应用编译执行的时候实际上他们都在一起的作为可遍历集合共同存在于一个相对会话空间内的)

创建一个资源字典,通过”Seyle”标签来封装资源。在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件。

后台代码:                         

<Style TargetType="TextBlock">

        <!--字体颜色-->

        <Setter Property="Foreground">

            <Setter.Value>

                <ImageBrush ImageSource="/Wpf项目练习;component/Image/t0183469513c0341652.jpg"/>

            </Setter.Value>

        </Setter>

 

        <!--字体颜色-->

        <Setter Property="FontSize"  Value="12"></Setter>

</Style>

前台代码:

<Grid>

        <Grid.RowDefinitions>

            <RowDefinition/>

            <RowDefinition/>

        </Grid.RowDefinitions>

        <Button  Grid.Row="0" >

            <TextBlock  >新增</TextBlock>

        </Button>

        <Button  Grid.Row="1">

            <TextBlock >修改</TextBlock>

        </Button>

</Grid>

 

运行图:

WPF资源字典与资源封装

在默认情况下,被加载到窗口中的所有TextBlock对象都将受到这个Style的影响,

如果只想定义的Style影响指定的TextBlock对象而不是所有的TextBlock对象

后台代码:我们为TextBlock添加一个x:Key="TextBlockStyle"

<Style TargetType="TextBlock" x:Key=" TextBlockStyle ">

        <!--字体颜色-->

        <Setter Property="Foreground">

            <Setter.Value>

                <ImageBrush ImageSource="/Wpf项目练习;component/Image/t0183469513c0341652.jpg"/>

            </Setter.Value>

        </Setter>

        <!--字体颜色-->

        <Setter Property="FontSize"  Value="12"></Setter>

</Style>

前台代码:

<Grid>

        <Grid.RowDefinitions>

            <RowDefinition/>

            <RowDefinition/>

        </Grid.RowDefinitions>

        <Button  Grid.Row="0" >

            <TextBlock  Style="{StaticResource TextBlockStyle}"  >新增</TextBlock>

        </Button>

        <Button  Grid.Row="1">

            <TextBlock >修改 </TextBlock>

        </Button>

</Grid>

 

运行图:

WPF资源字典与资源封装

然后我们使用TextBlockStyle属性来指定该TextBlock所要使用的Style,而其他没有将我们声明的Style指定为其样式的按钮将不受到该Style的影响。

 

然后再去“APP.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="PublicStyles/DT_PublicStyles.xaml"/>

            </ResourceDictionary.MergedDictionaries>

        </ResourceDictionary>

</Application.Resources>