نمایش نتایج 1 تا 16 از 16

نام تاپیک: آموزش WPF (متوسط تا پیشرفته)

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    بخش ششم-Resources-نحوه ی استفاده از Resource ها (قسمت دوم)

    اگر دقت کرده باید در کد قسمت قبل وقتی براش RadialGradientBrush را به خاصیت Background نسبت می دادیم نوع اشاره ما به براش StaticResource بود، این به چه معنی است ؟

    در هنگام اشاره به یک Object که در Resource تعریف شده است،دو نوع طریق اشاره وجود دارد:

    • StaticResource :در این نوع درهنگام ساخته شدن پنجره ، Resource یک بار نسبت داده می شود.
    • DynamicResource :در این نوع ،در هنگام نیاز شئ درون Resource نسبت داده می شود و در صورت تغییر خصوصیات کنترل های که به آن اشاره می کنند نیز تغییر می کنند .

    بگذارید این نوع اشاره ها را با یک مثال بررسی کنیم.در این مثال نوع اشاره دکمه 1 را به DynamicResourceتغییر می دهیم و با کلیک بر روی دکمه 1 رنگ براش RadialGradientBrush تعریف شده در Resource را تغییر می دهیم تا نتیجه را مشاهده کنیم :

    <Window.Resources>
    <RadialGradientBrush x:Key="btnGRBrush" >
    <GradientStop Color="Azure" Offset="0.4"/>
    <GradientStop Color="Peru" Offset="0.55"/>
    <GradientStop Color="PaleGoldenrod" Offset="1"/>
    </RadialGradientBrush>
    </Window.Resources>
    <StackPanel >
    <Button Background="{DynamicResource btnGRBrush}" Margin="5" Click="Button_Click">Button 1</Button>
    <Button Margin="5">Button 2</Button>
    <Button Background="{StaticResource btnGRBrush}" Margin="5">Button 3</Button>
    <Button Margin="5">Button 4</Button>
    </StackPanel>


    Code Behindبه صورت زیر :

    private void Button_Click(object sender, RoutedEventArgs e)
    {
    this.Resources["btnGRBrush"] = new RadialGradientBrush(Colors.BlanchedAlmond ,Colors.Blue);
    }


    با اینکار خروجی به صورت زیر تغییر میکند که تفاوت بین DynamicResource و StaticResource به نمایش در می آید.



    نکته مهم :توجه داشته باشید که در هنگام استفاده از این نوع اشاره ها دقت کنید چون StaticResourceها در هنگام ساخته شدن فرم ساخته شده و نسبت داده شده می شود ولی DynamicResourceتا هنگام نیاز ساخته نمی شوند.سعی کنید از StaticResource هنگامی استفاده کنید که هیج تغییری در آن ها بوجود نمی آید و از DynamicResource هنگامی که در هنگام اجرا تغییر می کنند (به عنوان مثال از دینامیک برای تنظیمات برنامه ای که با تغییر خصوصیات در همان لحظه تغییر ها اعمال می شوند و از استاتیک ها زمانی که با تغییر تنظیمات برنامه نیاز به ریستارت برنامه برای اعمال تغییر می باشد.) .
    آخرین ویرایش به وسیله ali.aghdam : پنج شنبه 27 آبان 1389 در 18:07 عصر

  2. #2

    بخش ششم-Resources-خاصیت Shared (قسمت سوم)

    خاصیت Shared :

    وقتی که شما از چندین کنترل به یک Resource اشاره می کنید در واقع شما به یک نمونه از Resource اشاره می کنید که دلیل آن true بودن خاصیت Shared به صورت پیش فرض است ولی اگر بنا به دلایلی می خواهید که در هنگام اشاره هر کنترل به resource یک نمونه جدید به آن نسبت داده شود این خاصیت را با False مقداردهی کنید


    <Window.Resources>
    <RadialGradientBrush x:Key="btnGRBrush" x:Shared="False" >
    <GradientStop Color="Azure" Offset="0.4"/>
    <GradientStop Color="Peru" Offset="0.55"/>
    <GradientStop Color="PaleGoldenrod" Offset="1"/>
    </RadialGradientBrush>
    </Window.Resources>
    نکته : با این کار در عمل مزایای DynamicResource از بین می رود.
    آخرین ویرایش به وسیله ali.aghdam : پنج شنبه 27 آبان 1389 در 18:08 عصر

  3. #3

    بخش ششم-Resources-نحوه ی تعریف و استفاده از Application Resource (قسمت چهارم)

    تعریف Resource ها در هر فرم کار عاقلانه ای نیست برای همین در اکثریت مواقع Resource ها را در بالاترین سطح برنامه یعنی Application تعریف می کنیم.هنگامی که به یک Resource اشاره می کنیم اگر آنResource در کنترل ،Window ویا Page جاری وجود نداشته باشد،Resource های Application جستجو می شود که بهترین قسمت برای Resourceهای است که در کل برنامه مورد استفاده قرار می گیرند.

    برای این کار Resource را در فایل App.xaml تعریف می کنیم به صورت زیر


    <Application x:Class="wpf_resources.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
    <!-- define resource Here-->
    </Application.Resources>
    </Application>
    حال فقط کافی است که از آن Resource استفاده کنیم تا بوسیله مکانیزم بالا به Resource مورد نظر دسترسی پیدا کنیم.
    آخرین ویرایش به وسیله ali.aghdam : پنج شنبه 27 آبان 1389 در 18:09 عصر

  4. #4

    بخش ششم-System Resources و نحوه استفاده از آن(قسمت پنجم)

    System Resource همان تنظیمات سیستم است که ما از آنها استفاده می کنیم در قبل گفتیم که وقتی Resource ی پیدا نشود به Application Resource مراجعه می گردد و در صورت نبود به System Resource مراجعه می شود.این Resourceها در قالب سه کلاس هستند که در فضای نام System.Windows قرار دارند.

    • SystemColors;:دستیابی به تنظیمات رنگ سیستم را فراهم می کند.
    • SystemFonts:دستیابی به تنظیمات قلم سیستم را فراهم می کند.
    • SystemParameters:دستیابی به طیف عظیمی از تنظیمات سیستم را فراهم می کند از جمله تنظیمات پنجره ها و سایز آن ،موس و کیبورد و...گرفته تا جلوه های نمایش سیستم.

    نکته :خصوصیات همه این کلاس ها از نوع ایستا هستند و در هنگام اشاره به آن می بایست به آن از نوع ایستا اشاره کنیم.

    در مثال زیر از هر سه کلاس استفاده شده است

    <!-- SystemFonts -->
    <Button Margin="5"
    FontSize="{x:Static SystemFonts.IconFontSize}"
    FontWeight="{x:Static SystemFonts.MessageFontWeight}"
    FontFamily="{x:Static SystemFonts.CaptionFontFamily}">Button 2</Button>

    <!-- SystemColors-->
    <Button Margin="5"
    BorderBrush="{x:Static SystemColors.ActiveBorderBrush}"
    Background="{x:Static SystemColors.HotTrackBrush}"
    Foreground="{x:Static SystemColors.HighlightTextBrush}"
    >Button 4</Button>

    <!-- SystemParameters -->
    <Button Margin="5"
    Width="{x:Static SystemParameters.MenuWidth}"
    Height="{x:Static SystemParameters.IconGridWidth}">

    </Button>
    آخرین ویرایش به وسیله ali.aghdam : پنج شنبه 27 آبان 1389 در 18:10 عصر

  5. #5

    بخش ششم-Resource Dictionaries (قسمت ششم)

    وقتی بخواهید که Resource های خود در پروژه های دیگر استفاده کنید و یا حتی آنها را از هم جدا کنید تا در صورت نیاز به راحتی از آنها استفاده کنید برای این منظور از Resource Dictionary استفاده می کنیم.Resource Dictionary یک فایل XAML ساده است که کاری انجام نمی دهد بلکه Resource ها را در خود نگهداری می کند.

    ساخت یک Resource Dictionary ساده :

    برای این منظور از منوی Project سپس Add New item کلیک کرده سپس از پنجره باز شده " Reource Dictionary " را انتخاب می کنیم.فایل XAML جدیدی با محتوای زیر باز می شود.

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



    </ResourceDictionary>
    سپس Resource های خود را در آن می نویسیم و برای استفاده از آن بسته به نیاز خود در کنترل ،پنجره و یا برنامه از آن به صورت زیر استفاده می کنیم.
    در اینجا از Resource Dictionary در Application Resource استفاده شده است:

    <Application x:Class="wpf_resources.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
    <ResourceDictionary Source="WhistlerBlue.xaml"/>
    </Application.Resources>
    </Application>
    نکته : توجه داشته باشید خاصیت Build Action فایل Dictionary حتما با Page تنظیم شده باشد Performance بالای داشته باشیم

    نکته : اگر در برنامه خورد چندین Resource Dictionary داشته باشیم که حتما همینطور است از روش زیر برای استفاده از آنها استفاده می کنیم

    <Application x:Class="wpf_resources.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="WhistlerBlue.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    </Application.Resources>
    </Application>
    آخرین ویرایش به وسیله ali.aghdam : پنج شنبه 27 آبان 1389 در 18:10 عصر

  6. #6

    Smile فایل PDF بخش ششم

    همانطور که قبلا قول داده بودم فایل PDF این بخش رو آماده کردم ولی به نظر خودم اون طور که می خواستم نشد ولی انشالله در بخش های بعدی سعی بر آن دارم که آموزش های بهتری ارائه بدم.


  7. #7

    بخش هفتم-معرفی Routed Event (قسمت اول)

    هر برنامه نویس دات نت با مفهوم Event ها آشنایی دارد (پیغام های که از یک شئ به شئ دیگر در هنگام رخ دادن عملی فرستاده می شوند) ولی در WPF به خاطر تفاوت های که در آن وجود دارد دیگر نمی توان به شکلی موثر از Event های معمول در Winform ها استفاده کرد برای همین WPF نوعی سیستم به نام Routed Event زیر سازی شده تا بتوان به شکلی موثر از مفهوم Event ها استفاده کرد.

    دلیل استفاده نکردن WPF از سیستم قبلی رویدادها به خاطر ساختار سلسله مراتبی اشیاء/اعضاء در WPF است یعنی ما در WPF می توانیم ساختار درختی از اشیاء/اعضاء را داشته باشیم به طور مثال می توان درون یک دکمه یک تکست باکس داشته باشیم که اگر بخواهیم از سیستم قبلی رویداد استفاده کنیم برای هر یک از این اعضاء رویداد مربوطه را تعریف کنیم که این عمل در دنیای واقعی کاری تاقت فرسا می باشد که می تواند زمان زیادی از پروژه را بی دلیل از بین ببرد.

    سیستم Routed Event این امکان را فراهم می سازد که یک رویداد توسط یک عضو رخ دهد و توسط یک عضو دیگر اجرا شود یعنی زیر شی ها می توانند به رویداد والدین خود دسترسی پیدا کنند(Event Bubbeling) این نوع دسترسی با توجه به نوع استراتژی پیمایش (RoutingStrategy) رویداد در درخت نمایش (Visual Tree) صورت می گیرد .
    در هنگام استفاده ازWPF بدون اطلاع از Routed Event استفاده می کنیم که برای نشان دادن این کار یک دکمه ایجاد کنید و یک رویداد کلیک به آن اضافه کنید.

    <Button Name="testbutton" Click="Button_Click">Click Me!</Button>
    و برای اینکه متوجه این امر بشوید به Code Behind برنامه رفته و از درون سازنده بر روی InitializeComponent کلیک راست کرده سپس Go To Definition را انتخاب کنید و از بین کد ها در partial کلاس کد مربوط به ثبت رویداد کلیک دکمه را پیدا کنید.

    #line 6 "..\..\..\MainWindow.xaml"
    this.testbutton.Click += new System.Windows.RoutedEventHandler(this.Button_Clic k);
    این کد ها در هنگام طراحی توسط Designer ایجاد شده که یک Routed Event در کلیک دکمه ثبت می شود(Register).

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •