Professional Documents
Culture Documents
Themes
Themes
0
الدرس األول
بسم هللا الرحمن الرحٌم
والصالة والسالم على سٌد المرسلٌن ابا القاسم محمد وعلى اله
اما بعد
ال ارٌد ان اطٌل بالمقدمة فالكثٌر ال ٌحبذون قراءة المقدمات وانا منهم لذلك سأدخل فً صلب الموضوع وان
شاء هللا سٌكون مفٌد وساستخدم اسلوب غٌر ذالك االسلوب الذي تعودتموه منً فً الدروس السابقة .
: Themes
فكرة الثٌم تقوم وتقعد على مبدا واحد ال اكثر هو التحكم بمظهر الموقع (الصفحات والعناصر ())Controls
,بمعنى ابسط التحكم بمظهر عناصر ASP.netوعناصر HTMLفً الصفحة كلون الخلفٌة وحجم الخط
ونوع الخط وموقع العنصر بالصفحة الخ هذا هو عمله اما ماهٌته هً انه عبارة عن مجلد ٌقع داخل المجلد
( )App_Themesوٌتكون من ملف واحد فً بعض االحٌان ولكن فً احٌانا كثٌرة من ملفٌن هما ملف
( )Skinوملف ( )CSSاو اكثر .
الجواب هو :ان Master Pageالفائدة منها مشاركة محتوٌات معٌنة خالل مجموعة من الصفحات فً
الموقع ,بٌنما ٌ Themesجعلك قادرا على التحكم بمظهر هذه المحتوٌات .
أنشــــــاء : Theme
طرٌقة انشاء الثٌم بسٌطة جدا وهً حسب هذه الخطوات :
أفتح Visual Studioومن Fileاختر Newثم اختر ASP.NET EMPTY WEB SITEاذا كنت
تستخدم ( )Visual Studio 2010اما اذا كنت تستخدم Visual Studio 2008فاالمر بسٌط اختر
Empty Web Siteاو ASP.NET Web siteال فرق بٌنهما لكن فً ٌ 2010وجد فرق .عموما
سمً المشروع (( Themesأللغة ((.))C#هذا المشروع سنعمل علٌه فً غالبٌة الدروس القادمة))
ّ
1
ثم من خالل ال Solution Explorerانقر Right Clickعلى مشروعنا واختر Add Asp.net
Folderاختر Theme
سترى أنه أضاف لك مجلد App_Themesوبداخله مجلد اخر بأسم Theme1هو هذا الثٌم ,
الثٌم ( )Themeفً بعض االحٌان قد ٌحتوي على انواع مختلفة من الملفات كالصور او ملفات نصٌة او حتى
مجلدات فرعٌة ( )Sub Folderولكن فً اغلب االحٌان ٌحتوي على نوعٌن من الملفات هما :
2
: Skin File
) التً تؤثر فقط علىAsp.net Controls( هً التحكم بخواص عناصر االي اس بً دوت نتSkinفكرة ال
فً الثٌمSkin وبأمكانك ان تضٌف اكثر من ملف.) الخBackGround,Fore Color( مظهر العنصر مثل
ٌعمل على صفحة معٌنة فعلٌك ان تطبق الثٌمSkin ولكً تجعل, امسح مافً داخله من كالمSkin بعد أضافة ملف
على هذه الصفحة
: تٌكس بوكس لٌكون كود الصفحة هكذا2 واضف صفحة وداخل هذه الصفحة اضف
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
3
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtFirst" runat ="server" />
<asp:TextBox ID="txtSecond" runat ="server" />
</div>
</form>
</body>
</html>
ً< )تعنasp:TextBox ( على اي تٌكس بكوس فً الصفحة حٌث انSkin فً المثال اعاله لقد ُطبق ال
هً االفتراضٌةSkin فً الصفحة وكانت التسمٌه لملفTextBox ان هذا التاثٌر ٌطبق فقط على
وبامكانك ان تغٌره بٌنما فً المحتوٌات بأمكانك ان تضٌفSkinFile.Skin التً تعنً ٌطبق على الكل
. فٌهSkin لكلID
) فأنه سوف ال ٌطبق على كل العناصر وانما حسب العنصر الذيID( أي ديSkin ًعندما تعط: مالحظة
: فً خواصةSkin قد اضفت له ملف
: اما فً الصفحة
<%@ Page Language="C#" Theme ="Theme1" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtFirst" runat ="server" SkinID ="TXT" />
<asp:TextBox ID="txtSecond" runat ="server" />
</div>
</form>
</body>
</html>
4
بٌنما الثانً لم نسند له SkinID فً الخاصٌةSkin لملفID بالنسبة للتٌكس بوكس االول اسندنا
. وعدم اضافتهID استعرض وشاهد الفرق بٌن اضافةSkin IDال
) المتعلقة بمظهرControl( ٌهٌمن على خواص العنصرSkin Fileشً مهم جدا وهو ان ال
ْ هناك
حمراءlabel واجعل خلفٌةlabel للتوضٌح أكثر أضف صفحة واضف فٌها,العنصر الذي ٌطبق علٌه
: اللون
: بٌنما فً الصفحة
<%@ Page Language="C#" Theme ="Theme1" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat ="server" BackColor ="Red" SkinID ="Label"
Text ="This My Label " />
</div>
</form>
</body>
</html>
5
بعد االستعراض :
بالرغم ان Labelكانت خلفٌته اللونٌة فً الكود حمراء لكن ان ملف Skinجعل الخلفٌة صفراء وهذا
المقصود بالهٌمنة على خواص العنصر ......
لنفترض لدٌنا ٓ 2تٌكس بوكس وطبقت علٌهم Skinبلون خلفٌة معٌن لجمٌعهم وكذلك لون الخط لكن اردت
واحد فقط من هذه التٌكس بوكس ٌكون لون خطه مختلف عن البقٌة فماذا سافعل فً هذا الوضع ؟
االمر بسٌط سابقا كنا نضٌف او نطبق الثٌم على الصفحة من خالل :
><%@ Page ……………………… Theme ="Theme1" %
لحل هذه المشكلة نطبق الثٌم على الصفحة بالشكل التالً :
"<%@ Page ………….. StylesheetTheme ="Theme1 >%
ونعطً لون الخط للتٌكس بوكس الوحٌد الذي اردنا لون خطه ٌكون مختلف البقٌة من خالل خواص التٌكس
بوكس....
والفرق بٌن الطرٌق االولى والثانٌة هو ان فً االولى ٌSkinهٌمن على خواص العنصر حتى لو غٌرت من
خالل العنصر نفسه ولكن فً الحالة الثانٌة سوف الٌهٌمن على خواص العنصر
حاول ان تطبق الكالم اعاله على المثال الخٌر الذي طبقناه على Label
>"<html xmlns="http://www.w3.org/1999/xhtml
>"<head runat="server
><title></title
></head
><body
>"<form id="form1" runat="server
><div
"<asp:Label ID="Label1" runat ="server" BackColor ="Red" SkinID ="Label
>Text ="This My Label " /
></div
></form
></body
></html
6
ًالدرس الثان
: Theme إٌقاف
) التً تستخدم لتفعٌل واٌقافEnable Theming ( ) تمتلك خاصٌةAsp.net Controls( جمٌع العناصر
بمعنى ابسط لنفترض ان احدى,)True( ً) وحالتها االفتراضٌة هControl( تفعٌل الثٌم على العنصر
الصفحات التً ٌطبق علٌها الثٌمتحتوي على مجموعة من العناصر ونرٌد احد هذه العناصر ال ٌطبق علٌه
: لناخذ مثال, )Enable Theming =False( الثٌم فً هذه الحالة نجعل الخاصٌة
) الثانً نوقف فٌهCalendar( من العنصر2 ) وضع فٌهاThemes( اضف صفحة جدٌدة الى المشروع
) واالول نتركه على حالة الن القٌمة االفتراضٌةEnable Theming =False( الثٌم من خالل الخاصٌة
) لٌصبح الكودEnable Theming =True( للخاصٌة
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Calendar ID="Calendar1" runat ="server" />
<br /><br />
<asp:Calendar ID="Calendar2" EnableTheming ="false" runat ="server" />
</div>
</form>
</body>
</html>
7
:)Calendar( ) للعنصرSkin( ) ونمسح مافً داخله ونكتبTheme2( ) داخلSkin File( ونضٌف ملف
<asp:Calendar
BackColor="White"
BorderColor="White"
BorderWidth="1px"
Font-Names="Verdana"
Font-Size="9pt"
ForeColor="Black"
NextPrevFormat="FullMonth"
Width="400px"
Runat="Server">
<SelectedDayStyle
BackColor="#333399"
ForeColor="White" />
<OtherMonthDayStyle
ForeColor="#999999" />
<TodayDayStyle
BackColor="#CCCCCC" />
<NextPrevStyle
Font-Bold="True"
Font-Size="8pt"
ForeColor="#333333"
VerticalAlign="Bottom" />
<DayHeaderStyle
Font-Bold="True"
Font-Size="8pt" />
<TitleStyle
BackColor="White"
BorderColor="Black"
BorderWidth="4px"
Font-Bold="True"
Font-Size="12pt"
8
>ForeColor="#333399" /
></asp:Calendar
كما تالحظ ,فقد طبق الثٌم على ( )Calendar1ولم ٌطبق على ( )Calendar2بسبب اٌقاف تفعٌل الثٌم على
(. )Calendar2
فً بعض االحٌان ٌكون لدٌك ثٌم واحد وترٌد تطبٌقة على جمٌع الصفحات هنا سٌكون امامك خٌارٌن :
ولكن ربما تكون لدٌك المئات من الصفحات فهذا فٌه بعض التعب .
ثانٌـــا :عن طرٌق تسجٌل الثٌم فً ( )Web.Configوبالتالً سوف ٌطبق على جمٌع الصفحات وال نحتاج
الن نكتب الكود اعاله
><configuration
><system.web
><pages theme ="Theme2" /
></configuration
9
<configuration>
<system.web>
<pages styleSheetTheme ="Theme2" />
</configuration>
والفرق بٌن الطرٌقة االولى والثانٌة فً تسجٌل الثٌم هو نفس الفرق الذي تكلمنا عنه مسبقا بٌن
<%@ Page ……………………… Theme ="Theme1" %>
و
<%@ Page ………….. StylesheetTheme ="Theme1" %>
ً وهً انه ربما ال ترٌد تطبٌق الثٌم على احدى الصفحات بٌنما مادام الثٌم سجل ف, ولكن هناك مشكلة
) فانه سٌطبق على الكل ؟Web.Config(
) Enable Theming ="False"( نوقف تطبٌق الثٌم على اي صفحة من خالل الخاصٌة
10
: Cascading Style Sheet(CSS)
) ٌطبقSkin Files( ) بٌنماHtml( ) وكذلك عناصرAsp.net Controls( ٌستخدم للتحكم بمظهر عناصر
) ٌطبق على عناصر الصفحة بصورة اوتوماتٌكٌة عند تطبٌق الثٌمCss( ) وكذلكAsp.net( على عناصر
)Style Sheet.css( على سبٌل المثال اضف ثٌم جدٌد الى المشروع وأضف داخله ملف, على الصفحة
html
{
background-color:gray;
font:14px Georgia,Serif;
}
.content
{
margin:auto;
width:600px;
border:solid 1px black;
background-color:White;
padding:10px;
}
h1
{
color:Gray;
font-size:18px;
border-bottom:solid 1px orange;
}
label
{
font-weight:bold;
}
input
{
background-color:Yellow;
border:double 3px orange;
}
.button
{
background-color:#eeeeee;
}
11
: ثم أضف صفحة وداخل هذه الصفحة
<%@ Page Language="C#" Theme ="Theme3" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div class ="content" dir="rtl">
<h1><التسجيل/h1>
<asp:Label ID="lblFirstName" Text =" االول االسم:" AssociatedControlID
="txtFirstName" runat ="server" />
<br />
<asp:TextBox ID ="txtFirstName" runat ="server" />
<br /><br />
<asp:Label ID="lblLastName" Text =" االخير االسم:" AssociatedControlID
="txtLastName" runat ="server" />
<br />
<asp:TextBox ID="txtLastName" runat ="server" />
<br /><br />
<asp:Button ID="btnSave" Text =" "دخولCssClass ="button" runat ="server" />
</div>
</form>
</body>
</html>
<) بٌنماH1>(<) وDiv > ( ) مثلHtml Element( طبعا بالصفحة اعاله لدٌنا نوعٌن من العناصر هما
) فً المتصفح لذلك فً كودhtml( ) الى عناصرRender( ) التً تترجمAsp.net Control( ًالنوع الثان
: بمعنى اخر لو استعرضت الصفحة اعاله, )Html( ) ُكتب على عناصرCSS(
12
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
<div class="aspNetHidden">
)Associated Control Id ( ) لذلك استخدمنا الخاصٌةSpan( ) ٌترجم على انه محتوىLabel ( ان
http://vb4arb.com/vb/showthread.php?2796-( (للمزٌد عن هذه الخاصٌة ٌرجى زٌارة
)) مع%DD%C7%C6%CF%C9-%C7%E1%CE%C7%D5%ED%C9-AssociatedcontrolId
ً) تترجم فButton,TextBox( ) اما بالنسبةLabel( ) التً تجعله ٌترجم فً المتصفح على انهLabel(
: ) سٌطبق علىٌهماCSS( ً< ) فالكود ادناه فInput>( المتصفح على انهما
input
{
background-color:Yellow;
border:double 3px orange;
}
. )CSS Class( ) من خالل الخاصٌةButton (هذا باالضافة الى اننا علمنا كالس للبوتون واسند لل
13
لزٌادة كفائة وسرعة الموقع دائما حاول ان تستخدم الثٌم للتحكم بمظهر الموقع وال تغٌر مظهر العنصر
( )Controlمن خالل خواصه التً تتحكم بمظهره الن عندما تكتب كود ( )Cssداخل الصفحة فً كل مرة
سوف ٌتم تحمٌل الصفحة ٌعاد تحمٌل كود ( )Cssمع الصفحة بٌنما لو وضعت ( )Cssفً ملف داخل الثٌم فً
اول تحمٌل سوف ٌخزن كود ( )Cssبصورة وقتٌه داخل المتصفح وكذلك تجنب دائما استخدام ()Skin File
واستخدم بدله ( )Css Fileلماذا ؟
الن استخدام ( )Skin Fileسوف ٌترجم ( ) Renderعلى انه خصائص للعنصر ( )Controlوٌدمج مع
العنصر قبل ( )Renderوسوف ٌترجم فً كل مرة تطلب فٌه الصفحة (.)Request Page
بامكانك ان تضٌف اكثر من ملف ( )Cssداخل الثٌم وسوف تطبق جمٌعها على الصفحة ٌ,عنً مثال لو كان
لدٌك 2من ( )Style Sheet Cascadingاذا لم تضعهم فً الثٌم سوف تستخدمهم هكذا :
>"<head runat="server
><title></title
><link href="StyleSheet1.css" rel="stylesheet" type="text/css" /
><href="StyleSheet2.css" rel="stylesheet" type="text/css" /
></head
والوضع اعاله مشابه تماما عندما تضع هذٌن الملفٌن داخل ثٌم وتطبق الثٌم على الصفحة ولٌس هناك فرق
باالداء والكفاءة .
14
الدرس الثالث
:Global Themes
طبعا من االمور الرائعة فً الدوت نت بأمكانك ان تعمل ثٌم واحد عام (ٌ )Globalطبق على العدٌد من
المواقع لكن بشرط ! هو ان تكون جمٌع هذه المواقع على نفس السٌرفر ( )WebServerوٌخزن هذا الثٌم
فً المسار التالً اذا كنت تستخدم (: )File System
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NETClientFiles\Them
es
بٌنما اذا اردته على السٌرفر (ٌ )IISعنً انك تستخدم WebLocationعلى ( )Httpفانك سوف تقوم :
]Windows\Microsoft.NET\Framework\[version
folder
body
15
{
background-color :Red ;
}
body
{
background-color :Green ;
<body>
<form id="form1" runat="server">
<div dir ="rtl" >
<h1><الثيم اختر/h1>
<ul>
<li>
<a href ="Default.aspx?theme=Red"> <االحمر الثيم/a>
</li>
<li>
<a href ="Default.aspx?theme=Green"> < االخضر الثيم/a>
</li>
</ul>
</div>
</form>
</body>
if (Request["theme"] != null) {
switch (Request["theme"])
{
case "Red":
Page.Theme = "Red";
break ;
case "Green":
Page.Theme = "Green";
break;
}
16
فً الكود اعاله استخدمنا متغٌر من نوع ( )Requestاسم المتغٌر ( )themeالذي اسندنا له قٌمتٌن اما
(Redاو ) Greenوعلمنا شرط اعتمادا على هذه القٌمتٌن ,بالمكان استخدام ال(. )Session
وكذلك باالمكان تغٌٌر ( )Skinالي عنصر ( )Controlاثناء التشغٌل من خالل الخاصٌة ( )Skin IDفً
الحدث (. )Page_PreInitمثال :
;"Label1.SkinID = "LabelSkin
مالحظــــــــــــــــــــــــــات
كما الحظتم عند استخدام Skin Fileستحتاجون الى كتابة كود وربما ٌصعب على البعض كتابة كود Skin
لذلك فهناك طرٌقة بسٌطة تساعدك على هذا الشً ,فً اي مشروع تعمله اضف فٌه صفحة تجرٌبٌة وضع
فٌها العناصر التً سوف تستخدمها فً الموقع مثل ( Labelو Buttonو TextBoxو File Upload
الخ)ومن خالل خصائص كل عنصر غٌر الخصائص التً تتعلق بمظهر هذا العنصر مثل لون الخلفٌة نوع
الخط وحجمه وعرض العنصر الخ
><body
>"<form id="form1" runat="server
><div
></div
></form
></body
17
BorderColor="#339966" BorderStyle="Groove" BorderWidth="4px"
ForeColor="#990000" Height="30px" Width="300px"></asp:TextBox>
)SkinID( ) اكتبID( ) والصق فٌه الكود الذي نسخته وبدلSkin File( ثم افتح
) اعاله الي تٌكس بوكس تستخدمه وبالتالً وحدت مظهر جمٌعSkin( االن صار بامكانك ان تسخدم
. فً الموقعTextbox
) كذلك تحتاج فٌه كتابة اكواد ولكن للسهولة هناك بٌئة رسومٌةCascading Style Sheet( اما بالنسبة
) وداخل االقواس الي عنصرStyle Sheet.css( افتح ملف, فً الفٌجوال ستودٌوCSS تساعدك على كتابة
Body ) الذي ٌمثلBody ) (الصورة ادناه اخترناBuild Style( ) واخترRight Click( فٌه انقر على
الصفحة
18
صار بامكانك ان تختار اي شً
19
أتمنى ان كان هناك خطأ او استفسار مراسلتً فأنا انسان قد أخطا وقد اصٌب ...
محمــــــــــــــــــــــــــد الساعـــــــــــــــــــــــــدي
www.Rtoosh.Net
Developer@Rtoosh.Net
http://forums.asp.net/members/alsaady.aspx
+9647703291330
20