惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 同一片海

Win10 资源管理器窗口无边框的问题 Android Studio发布Release版本之坑--Unknown host 'd29vzk4ow07wi7.cloudfront.net' 浏览器外部署Silverlight更新检查失败的原因及对策 C#调用非托管Dll时的参数传递 使用ATL开发ActiveX控件 大数据量传输时配置WCF的注意事项 在Silverlight 3中使用主题 [Silverlight]Selector类到底有没有SelectedValue属性? WCF安全之ASP.NET兼容模式 WCF安全之customBinding [Silverlight]AutoCompleteBox控件的一个Bug? [Silverlight]一个简单的GroupBox控件 [Silverlight]DataGrid相关的几个小知识点 实现下拉列表支持DataGrid的AutoCompleteBox 可分片数据持久层-ShardingPL使用说明 Silverlight数据绑定中的可空类型与自定义转换器 - 同一片海 一个丑陋的对Silverlight中的Grid无CellPadding的解决方案 - 同一片海 Silverlight中的资源文件 - 同一片海 - 博客园 【分享】SqlServer数据库文档生成工具
Silverlight自定义主题
同一片海 · 2010-06-08 · via 博客园 - 同一片海

在Silverlight 3中使用主题》一文中已经对在Silverlight中使用ToolKit提供的主题做了介绍,本文将介绍在Silverlight中实现并使用自定义主题。

有时候我们可能想开发一套具有特色的主题而不是采用ToolKit提供的默认主题,或者我们可能只是为了统一程序的风格而做一些统一处理(例如将所有TextBlock的Margin定义为5),这时我们就需要自定义主题。使用自定义主题时同样需要添加对Silverlight ToolKit中的System.Windows.Controls.Theming.Toolkit程序集的引用。

以下是实现并使用自定义主题的几种方式:

一、使用自定义主题文件

实现步骤:

1、在项目中添加新项,并选择“Silverlight 资源字典”模板。

本示例添加的主题资源文件名为“CustomTheme.xaml”。

注意:需要将添加的主题资源文件的生成操作设置为“内容”。

2、在主题资源文件中添加样式。

注意:添加样式时只需指定TargetType属性,无需也不能指定 x:Key。

CustomTheme.xaml源码:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="Button">
        <Setter Property="Foreground" Value="Red"></Setter>
    </Style>

    <Style TargetType="TextBox">
        <Setter Property="Foreground" Value="Red"></Setter>
    </Style>

</ResourceDictionary>

3、使用ImplicitStyleManager类提供的附加属性将样式应用到控件

MainPage.xaml源码:

<UserControl 
    x:Class="ThemeSample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Theming="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit" >
    <StackPanel x:Name="LayoutRoot" Width="160" Margin="100"
                    Theming:ImplicitStyleManager.ApplyMode="Auto" 
                    Theming:ImplicitStyleManager.ResourceDictionaryUri= "Themes/CustomTheme.xaml">
        <Button Content="Button" Margin="10" ></Button>
        <TextBox Text="TextBox" Margin="10"></TextBox>
    </StackPanel>
</UserControl>

效果预览:

image

二、自定义主题控件

如果想将自定义主题以程序集的方式发布并提供给第三方使用,就需要自定义主题控件。

本示例将以第一种方式所添加的样式文件做为基础实现一个自定义主题控件。

实现步骤:

1、将CustomTheme.xaml文件的生成操作设置为“嵌入的资源”。

2、在项目中添加类,并将类定义为从System.Windows.Controls.Theming.Theme类继承。

本示例添加的类名为CustomTheme。

3、为类添加默认构造函数并为基类的构造函数提供参数。

CustomTheme.cs源码:

using System.Windows.Controls.Theming;

namespace ThemeSample
{
    public class CustomTheme : Theme
    {
        public CustomTheme()
            : base(typeof(CustomTheme).Assembly, "ThemeSample.Themes.CustomTheme.xaml")
        {}
    }
}

注意主题资源文件的写法类似于命名空间+文件名,而不是普通路径。

4、使用自定义主题控件。

MainPage.xaml源码:

<UserControl 
    x:Class="ThemeSample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ThemeSample">
    <local:CustomTheme>
        <StackPanel x:Name="LayoutRoot" Width="160" Margin="100">
            <Button Content="Button" Margin="10" ></Button>
            <TextBox Text="TextBox" Margin="10"></TextBox>
        </StackPanel>
    </local:CustomTheme>
</UserControl>

使用自定义主题控件后的效果与使用第一种方式的效果一致,此处不再展示效果图。