ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





صفحه 3 از 4 نخست 1234 آخرین
نمایش نتایج: از 21 به 30 از 35
  1. #21
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت ششم )

    کنترل DockPanel:
    در دات نت 1.x و 2.0 با خاصیتی به نام Dock آشنا شدید. این خاصیت برای هر کنترلی که تنظیم می شد ( می شود)، با عث می شد (می شود) که کنترل مورد نظر بر اساس مقداری که برای خاصیت Dock آن تنظیم شد است، به یکی از گوشه های کنترل پدر خودش وصل شود. به عنوان مثال اگر کنترلی دارای مقدار Top برای خاصیت Dock باشد، واین کنترل مستقیما بر روی فرم قرار گرفته باشد، این کنترل به گوشه بالایی فرم متصل می شود. در نتیجه با تغییر عرض فرم، این کنترل به صورت اتوماتیک نیز تغییر سایز می دهد و عرض خودش را با عرض فرم مجددا تنظیم می کند.از این خاصیت در برنامه ها، زیاد استفاده می شود، به عنوان مثال کنترل Status Bar که معمولا در پایین فرم، Dock می شود، ویا منوی برنامه که در گوشه بالایی فرم Dock می شود از این نمونه هستند.

    کنترل DockPanel نیز عملکری مشابه با عملکر خاصیت Dock دارد. با این تفاوت که قدرت بسیار بالاتر و امکانات بسیار بیشتری را در اختیار شما قرار می دهد.
    هر کنترلی که در کنترل DockPanel قرار بگیرد، خاصیتی به نام Dock به آن پیوست خواهد شد. این خاصیت دارای چهار مقدار Left، Top، Bottom و Right می باشد. توسط این مقادیر می توانید کنترل های خود را در کنترل DockPanel تنظیم نمایید.

    به نمونه کد زیر دقت کنید :
    کد HTML:
    <Window x:Class="DockPanel.DockPanelContainer"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DockPanelContainer" Height="300" Width="300">
        <DockPanel>
            <Button DockPanel.Dock="Right">"Right"</Button>
            <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
                <TextBlock Margin="3">sample TextBlock</TextBlock>
                <Button HorizontalAlignment="Right" Margin="3">button</Button>
            </StackPanel>
             
            <Menu DockPanel.Dock="Bottom" >
                <MenuItem Header="Item0">
                    <MenuItem Header="Item00">
                        <MenuItem Header="Item000"></MenuItem>
                    </MenuItem>
                    <MenuItem Header="Item01"></MenuItem>
                    <MenuItem Header="Item02"></MenuItem>
                    <MenuItem Header="Item03"></MenuItem>
                </MenuItem>
                <MenuItem Header="Item1">
                    <MenuItem Header="Item10">
                        <MenuItem Header="Item100"></MenuItem>
                    </MenuItem>
                    <MenuItem Header="Item11"></MenuItem>
                    <MenuItem Header="Item12"></MenuItem>
                    <MenuItem Header="Item13"></MenuItem>
                </MenuItem>
            </Menu>
            <TextBox TextWrapping="Wrap" MaxWidth="80" DockPanel.Dock="Left">DockPanel.Dock="Left"</TextBox>           
            <TextBox TextAlignment="Center" VerticalAlignment="Center">Dock value Is Fill</TextBox>
        </DockPanel>
    </Window>
    در بالاترین، سطح از این کنترل ها، کنترل DockPanel قرار گرفته است. پنج کنترل دیگر به عنوان فرزندان مستقیم کنترل DockPanel قرار گرفته اند که بعضی از این کنترل ها، خود نیز شامل چندین کنترل دیگر می باشند. تمامی کنترل های فرزندف دارای خاصیت پیوست شده Dock می باشند. به عنوان مثال قطعه کد زیر:
    کد HTML:
    <Button DockPanel.Dock="Right">"Right"</Button>

    دکمه ای را به عنوان فرزند کنترل DockPanel تعریف می کند که در سمت راست خودش قرار گرفته است. دستور DockPanel.Dock="Right" باعث می شود که کنترل، به گوشه سمت راست کنترل DockPanel قرار گیرد.

    نتیجه حاص از اجرای کد فوق در شکل زیر مشخص شده است:

    ترتیب در Dock کردن کنترل ها:

    ترتیب تنظیم خاصیت Dock مربوط به کنترل ها در کنترل DockPanel مهم می باشد. به عنوان مثال دو قعطه کد زیر را نظر بگیرید :
    کد HTML:
    <Window x:Class="DockPanel.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <DockPanel>
            <Button Background="Green" DockPanel.Dock="Top">button1</Button>
            <Button Background="Blue" DockPanel.Dock="Left">button2</Button>
            <Button DockPanel.Dock="Right">button3</Button>
            <Button DockPanel.Dock="Bottom">button4</Button>
            <Button >button5</Button>        
        </DockPanel>
    </Window>
    شکل حاصل از اجرای قطعه کد فوق مشابه زیر خواهد بود :

    در کد فوق، دکمه ای که با رنگ سبز مشخص شده است، به دلیل اینکه قبل از دکمه آبی رنگ تعریف شده است، کل فضای گوشه بالایی را به خود اختصاص داده است. حال اگر جای تعریف این دو دکمه (button1 و button2) را در کد عوض کنیم، یعنی داشته باشیم :

    کد HTML:
    <Window x:Class="DockPanel.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <DockPanel>
            <Button Background="Blue" DockPanel.Dock="Left">button2</Button>
            <Button Background="Green" DockPanel.Dock="Top">button1</Button>        
            <Button DockPanel.Dock="Right">button3</Button>
            <Button DockPanel.Dock="Bottom">button4</Button>
            <Button >button5</Button>        
        </DockPanel>
    </Window>
    مقدار Fill در خاصیت Dock :

    خاصیت Dock از کنترل DockPanel دارای مقدار Fill نمی باشد. در واقع به آن نیاز ندارد. دلیل این امر به نحوه چیدمان کنترل ها در کنترل DockPanel مربوط می شود. کنترل DockPanel همواره سعی بر دادن کل فضای موجود به کنترل های فرزند خودش می باشد. به عنوان مثال اگر کنترل DockPanel فقط دارای یک کنترل Button باشد، این دکمه کل فضای موجود بر روی کنترل DockPanel را به خود اختصاص می دهد حتی اگر خاصیت Dock مربوط به کنترل را مثلا بر روی Left قرار دهید..(اگر مقادیر عرض و ارتفاع برای کنترل Button تعریف نشده باشد)

    حال اگر دکمه دیگری با خاصیت Dock برابر با Right به کنترل DockPanel اضافه کنید، فضای موجود بر روی کنترل DockPanel به دوقسمت تقسیم بندی می شوند. در این حالت مقدار فضایی که دکمه اول احتیاج دارد، در اختیارش قرار داده می شود و بقیه فضای موجود به دکمه دوم اختصاص داده می شود.

    این تقسیم بندی برای کنترل های فرزند دیگر ( در صورت وجود) نیز انجام می شود تا نهایتا کل فضای موجود بر روی کنترل DockPanel بین کلیه کنترل های فرزندش تقسیم شود.


    خاصیت LastChildFill :

    ذکر این نکته ضروری است که تمامی مطالب گفته شده در بخش قبلی (ترتیب در Dock کردن کنترل ها) زمانی درست می باشند که خاصیت LastChildFill از کنترل DockPanel بر روی True تنظیم گردد. اگر این خاصیت True باشد که مقدار پیش فرض آن نیز True می باشد، آخرین کنترلی که بر روی کنترل DockPanel قرار می گیرد، کل فضای باقی مانده از کنترل DockPanel را به خود اختصاص می دهد. در غیر این صورت همه کنترل ها به اندازه مقدار فضایی که نیاز داشته باشند از کنترل DockPanel گرفته و بقیه فضای باقی مانده ( اگر موجد باشد) بدون استفاده باقی خواهد ماند.

    به عنوان مثال اگر در کد فوق دستور LastChildFill="False" را اضافه کنیم :
    کد HTML:
    DockPanel LastChildFill="False">
            <Button Background="Green" DockPanel.Dock="Top">button1</Button>
            <Button Background="Blue" DockPanel.Dock="Left">button2</Button>
            <Button DockPanel.Dock="Right">button3</Button>
            <Button DockPanel.Dock="Bottom">button4</Button>
            <Button >button5</Button>
        </DockPanel>
    در شکل فوق، آخرین کنترلی که به کنترل DockPanel اضافه شده است، button5 می باشد. کنترل DockPanel به این دکمه به اندازه مورد نیازش ( اندازه ای که بتواند متن داخل دکمه مشخص باشد) فضا می دهد و بقیه فضای موجود ( کادر زرد رنگ) بدون استفاده باقی خواهد ماند.
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar DockPanel.rar (49.2 کیلو بایت, این فایل 1 مرتبه دانلود شده است )
  2. 1
  3. #22
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت هفتم )

    کنترل WrapPanel :

    کنترل WrapPanel نیز یکی از کنترل های کانتینر می باشد. این کنترل در طراحی واسط کاربری شما نقش زیادی نمی تواند بازی کند. در واقع مواردی که از این کنترل می توان استفاده کرد محدود و در بعضی از کاربرد های خاص به کار می رود.

    کنترل WrapPanel عناصر فرزند خود را به دوصورت می تواند تراز بندی کنید. این امر بستگی به خاصیت Orientation از این کنترل دارد. اگر این خاصیت بر روی Horizontal باشد ( حالت پیش فرض horizontal می باشد)، عناصر به صورت سطری و در داخل اولین سطر از این کنترل قرار میگیرند. چنانچه مقدار فضای مورد نیاز برای کنترل های فرزند، بیش از فضای موجود بر روی یک سطر باشد، عناصر فرزند به صورت اتواتیک به سطر بعدی شیفت داده می شوند. این عمل آن قدر تکرار می گردد تا تمامی عناصر بر روی کنترل WrapPanel قرار داده شوند.
    به کد زیر توجه کنید :
    کد HTML:
    <Window x:Class="WrapPanel.HorizontalWrapPanel"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="HorizontalWrapPanel" Height="300" Width="300">
       
            <WrapPanel>
                <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/add-file.png"></ImageBrush>
                </Button.Background>
                </Button>
            <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/copy.png"></ImageBrush>
                </Button.Background>
            </Button>
            <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/cut.png"></ImageBrush>
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/zoom+.png" />
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/zoom-.png" />
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/search.png" />
                </Button.Background>
            </Button>
        </WrapPanel>
        
    </Window>
    این قطعه کد مربوط به پنجره ای است که یک کنترل WrapPanel به عنوان کنترل کانتینر آن قرار داده شده است. درون این کنترل، شش دکمه قرار داده شده است که هر یک دارای خواص مربوط به خودش می باشد. نتیجه حاصل از کد فوق در شکل زیر نشان داده شده است:


    همانطور که در شکل نیز مشخص است، عناصر روی کنترل WrapPanel به صورت سطری قرار گرفته اند. حال اگر در زمان اجرا، عرض پنجره فوق کم شود، بعضی از عناصر به سطر بعدی در کنترل WrapPanel شیفت داده می شوند:


    حال اگر خاصیت Orientation این کنترل را بر روی Vertical تنظیم کنید، عناصر به صورت ستونی تراز می شوند، ابتدا ستون اول و چنانچه فضای کافی برای قرار گیری عناصر بر روی ستون اول موجود نباشد، بقیه عناصر به ستون بعدی شیفت داده می شوند.
    برای اعمال این تغییر کافیست تگ آغازین کنترل WrapPanel را به صورت زیر تغییر دهید :

    کد HTML:
    <WrapPanel Orientation="Vertical">
            <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/add-file.png"></ImageBrush>
                </Button.Background>
            </Button>
            <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/copy.png"></ImageBrush>
                </Button.Background>
            </Button>
            <Button Margin="3" MinWidth="32" MaxWidth="32" MinHeight="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/cut.png"></ImageBrush>
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/zoom+.png" />
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/zoom-.png" />
                </Button.Background>
            </Button>
            <Button Height="32" MaxWidth="32" MinHeight="32" MinWidth="32" Width="32">
                <Button.Background>
                    <ImageBrush ImageSource="./Images/search.png" />
                </Button.Background>
            </Button>
        </WrapPanel>
    یکی از کاربر هایی که از WrapPanel ها می تواند در آن بهره جست، ایجاد کنترل هایی مانند Tool strip می باشد. (البته ابزار های مجزایی برای toolbar ها نیز موجود است).

    نکته :
    خاصیت دیگری که اکثر کنترل های WPF ، از جمله کنترل WrapPanel دارامی باشند، خاصیت Flow Direction می باشد.
    این خاصیت دارای دو مقدار Left To Right و Right To Left می باشد که مقدار پیش فرض آن Left To Right می باشد. این خاصیت جهت تراز بندی کنترل ها را نشان می دهد. بری برخی از زبان ها از جمله زبان فارسی، این خاصیت بسیار پر کاربرد می باشد.

    به عنوان مثال می توانیدبا اضافه کردن دستور
    کد HTML:
    FlowDirection="RightToLeft"
    یک تگ آغازین کنترل WrapPanel ، ستون آغازین را برای قرار گیری کنترل ها را از سمت راست به چپ تعیین کنید.

    موفق باشید
  4. 1
  5. #23
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت هشتم)

    کنترل UniformGrid:
    این کنترل ظاهری شبیه به عنصر Gird (که در بخش بعدی توضیح داده خواهد شد) دارد. این کنترل به تعدادی سطر و ستون با اندازه های یکسان تقسیم بندی می شود. عناصر فرزند این کنترل می توانند در هریک از این سلول ها قرار بگیرند.
    سلول های حاصل از ایجاد این کنتنرل، همگی دارای اندازه های یکسان می باشند.

    نحوه استفاده از این کنترل به صورت زیر می باشد:
    کد HTML:
    <UniformGrid Roes="5" Columns="5">
    .
    .
    .
    </UniFormGrid>
    که شامل تعریف خود کنترل، تعداد سطر ها و تعداد ستون های آن می باشد.

    این کنترل برای موارد خاصی به کار برده می شود و به ندرت در طراحی واسط های برنامه شما به کار برده می شود. به عنوان مثال شکل زیر یک جدول ضرب 5*5 را نشان می دهد.
    کد HTML:
    <Window x:Class="UniformGrid.UniformGridContainer"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="UniformGridContainer" Height="200" Width="200">
        <Window.Resources>
            <SolidColorBrush x:Key="btnBack" Color="Coral"></SolidColorBrush>
        </Window.Resources>
        <UniformGrid Rows="6" Columns="6">
            <Button  Background="Red" >*</Button>
            <Button  Background="{StaticResource btnBack}">1</Button>
            <Button Background="{StaticResource btnBack}">2</Button>
            <Button Background="{StaticResource btnBack}">3</Button>
            <Button Background="{StaticResource btnBack}">4</Button>
            <Button Background="{StaticResource btnBack}">5</Button>
            <Button Background="{StaticResource btnBack}">1</Button>
            <Button >1</Button>
            <Button >2</Button>
            <Button >3</Button>
            <Button >4</Button>
            <Button >5</Button>
            <Button Background="{StaticResource btnBack}">2</Button>
            <Button >2</Button>
            <Button >4</Button>
            <Button >6</Button>
            <Button >8</Button>
            <Button >10</Button>
            <Button Background="{StaticResource btnBack}">3</Button>
            <Button >3</Button>
            <Button >6</Button>
            <Button >9</Button>
            <Button >12</Button>
            <Button >15</Button>
            <Button Background="{StaticResource btnBack}" >4</Button>
            <Button >4</Button>
            <Button >8</Button>
            <Button >12</Button>
            <Button >16</Button>
            <Button >20</Button>
            <Button  Background="{StaticResource btnBack}">5</Button>
            <Button >5</Button>
            <Button >10</Button>
            <Button >15</Button>
            <Button >20</Button>
            <Button >25</Button>
        </UniformGrid>
    </Window>
    نکته :
    در این کنترل، صراحتا نمی توانید مشخص کنید که کدام کنترل در چه سلولی قرار بگیرد. در واقع سلول هر کنترل بر اساس ترتیبی که آن کنترل در کنترل های فرزند کنترل UniformGrid دارد، مشخص می شود.
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar UniformGrid.rar (37.2 کیلو بایت, این فایل 2 مرتبه دانلود شده است )
  6. 1
  7. #24
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت نهم)

    سورس مربوط به کنترل گرید، در پایان مبحث گرید ارائه می گردد.


    کنترل Grid :
    کنترل گرید یکی از قوی ترین و پرکاربرد ترین کنترل های کانتینر می باشد. به طور حتم می توان گفت که در بیش از 90 درصد موارد، شما از این کنترل برای طراحی واسط کاربری برنامه های خود استفاده خواهید کرد. این کنترل دارای خواص زیادی می باشد که شما را در طراحی واسط های کاربری پیچیده یاری می کند.
    همانطور که تاکنون نیز شاهد بوده اید، این کنترل به صورت پیش فرض، کنترل کانتینر اصلی در هر پنجره ای قرار داده شده است که در مثال های قبلی ما ر حسی نیاز آن را تغییر داده ایم و متناسب با نیاز خود آن را تعریف کرده ایم.
    مهمترین خواص کنترل گرید، خواص مربوط به تعاریف سطر و ستون آن می باشد. با تعریف سطر ها وستون ها، می توانید مجموعه ای از سلول ها را در این کنترل به وجود آورید.
    عناصری که بر روی این کنترل قرار میگیرند، هر یک می توانند در یک سلول و یا بر حسب تعریفی که شما برای آن مشخص می کنید، در دو و یا بیش از دو سلول قرار گرید.
    تعریف کنترل گرید در ساده ترین حالت، (تنها دارای یک سطر و یک ستون) به صورت زیر می باشد.

    کد HTML:
    <Grid>
        <!--Controls goes here-->
    </Grid>
    تعریف فوق که در ابتدای ایجاد هر پنجره جدیدی،د رون کد XAML آن پنجره مشاهده می کنید، یک کنترل گرید دارای یک سطر و ستون برای شما ایجاد می کند. همانطور که قبلا نیز اشاره شد، اکثر کنترل ها در حالت پیش فرض، دارای خواص HorizontalAlignment و VerticalAlignment هستند که به صورت پیش فرض دارای مقدار Stretch می باشند. با توجه به این نکته چنانچه شما یک دکمه مانند Button را به توسط دستور زیر :
    کد HTML:
    <Button>sample Button</Button>
    کد HTML:
    <Window x:Class="Grid.Window1"
         
     
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml
     
    /presentation"
         
     
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xa
     
    ml"
        Title="Window1" Height="300" Width="300">
        <Grid>
            <Button>sample Button</Button>
        </Grid>
    </Window
  8. 1
  9. #25
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت دهم)

    ادامه کنترل گرید:

    خاصیت ShowGridLines :
    کنترل گرید دارای خاصیتی به نام ShowGridLines می باشد که مقدار پیش فرض آن False می باشد.
    چنانچه این مقدار را به True تغییر دهید، می توانید خطوطی که سطر ها وستون های کنترل گرید را از یکدیگر جدا می کند را مشاهده نمایید. البته معمولا از این خاصیت استفاده چندانی نمی شود مگر در موارد خاصی که شما نیاز داشته باشید، خط واصل بین سطر ها وستون ها را به کاربر نهایی نشان دهید.
    حال به قطعه کد زیر که ترکیبی از دو قطعه کد فوق است توجه فرمایید :
    کد HTML:
    <Window x:Class="Grid.Window1"
         
    xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml" target="_blank">http :// schemas.microsoft.com/winfx/2006/xaml</a>
    /presentation"
         
    xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xa" target="_blank">http://schemas.microsoft.com/winfx/2006/xa</a>
    ml"
        Title="Window1" Height="300" Width="300">
        <Grid ShowGridLines="True">
            <!--Begin Grid Row Definitions-->
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition> <!--
    Frist Row-->
                <RowDefinition></RowDefinition><!--
    Second Row-->
                <RowDefinition></RowDefinition><!--
    Third Row-->
            </Grid.RowDefinitions>
            <!--End of Grid Row Definitions-->
             
            <!--Begin Grid Column Definitions-->
            <Grid.ColumnDefinitions>
                 
    <ColumnDefinition></ColumnDefinition><!--First 
    Column-->
                 
    <ColumnDefinition></ColumnDefinition><!--Second 
    Column-->
                 
    <ColumnDefinition></ColumnDefinition><!--Third 
    Column-->
            </Grid.ColumnDefinitions>
            <!--End of Grid Column Definitions-->
            
        </Grid>
    </Window>
    قطعه کد فوق، سه سطر و سه ستون برای کنترل گرید تعریف می کند که در مجموع 9 سلول را برای این کنترل به وجود می آورند.
    تعادل در اندازه سطر ها و ستون ها :
    همانطور که در شکل فوق مشخص است، فضای موجود بر روی کنترل گرید، به صورت مساوی بین تمامی سطر ها وستون های این کنترل تقسیم می شود. در زمان اجرای برنامه و با تغییر سایز پنجره و به تبع آن تغییر سایز گرید، این فضا همچنان به صورت اتوماتیک، به قسمت های مساوی بین سطر هاو ستون های کنترل گرید، تقسیم می شود.
    در واقع در حالت عادی، کنترل گرید دارای رفتاری مشابه با کنترل UniformGrid می باشد که در بخش قبلی در رابطه با آن توضیحات مفصلی داده شد.
    همانطور که اشاره شد، سطر ها دارای خاصیتی به نام Height و ستون ها دارای خاصیتی به نام Width در کنترل گرید می باشند. هر یک از این دو خاصیت، می توانند یکی از سه مقدار زیر را در بر گیرند که با توجه به آن مقدار فضای آن و رفتار آن با کنترل درونی خودش مشخص می شود.
    1-سایز مطلق :
    توسط این خاصیت می توانید، مقدار مشخص و ثابتی را به عنوان عرض ستون و یا ارتفاع سطر مشخص کنید. به عنوان مثال دستور
    کد HTML:
    <RowDefinition Height="200"></RowDefinition>
    سطری را با ارتفاع ثابت 200 تعریف می کند و دستور زیر :
    کد HTML:
    <ColumnDefinition Width="200"></ColumnDefinition>
    ستونی را با عرض ثابت 200 تعریف می کند.
    2-سایز اتوماتیک :
    این خاصیت، عرض ستون و ارتفاع سطر را به صورت اتوماتیک و بر اساس نیاز کنترل درونی خودش تنظیم میکند. به عنوان مثال اگر کنترلی با دارای عرض 200 و ارتفاع 300 باشد و درون سلولی که سطر و ستون آن با این روش مقدار دهی شده اند، قرارداشته باشد، سلول مورد نظر تغییر اندازه داده تا بتواند کل فضای مورد نیاز آن کنترل را تامین کنید. مقداری که باید به کار برده شود تا سطر و ستونی به عنوان سطر و ستون اتوماتیک معرفی گردد، کلمه Auto می باشد. به کد های زیر توجه کنید:
    کد HTML:
    <RowDefinition Height="Auto"></RowDefinition> 
    <ColumnDefinition Width="Auto"></ColumnDefinition>
    در شکل فوق سطر و ستونی با ارتفاع اتوماتیک تعریف شده اند.
    3-سایز نسبی :
    توسط این خاصیت، فضای موجود بین تعدای سطر و ستون تقسیم بندی می شود. در واقع این حالت، حالت پیش فرض برای عرض ستون ها و ارتفاع سطرها می باشد. توسط کاراکتر * می توانید از این خاصیت برای خواص Width و Height استفاده نمایید.
    به عنوان مثال، کد های زیر نتیجه ای یکسان با آن چیزی که در شکل قبلی ملاحظه کردید را خواهد داشت.
    کد HTML:
    <Grid ShowGridLines="True">
        <!--Begin Grid Row Definitions-->
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition> 
    <!--Frist Row-->
            <RowDefinition 
    Height="*"></RowDefinition><!--Second Row-->
            <RowDefinition 
    Height="*"></RowDefinition><!--Third Row-->
        </Grid.RowDefinitions>
        <!--End of Grid Row Definitions-->
         
        <!--Begin Grid Column Definitions-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition 
    Width="*"></ColumnDefinition><!--First Column-->
            <ColumnDefinition 
    Width="*"></ColumnDefinition><!--Second Column-->
            <ColumnDefinition 
    Width="*"></ColumnDefinition><!--Third Column-->
        </Grid.ColumnDefinitions>
        <!--End of Grid Column Definitions-->
        
    </Grid>
    نکته قابل توجه ای که می توان در حالت سایز نسبلی به آن توجه داشت و به واقع دلیل اصلی نام گذاری آن نیز، همین نکته می باشد این است که شما می توانید سطری یا ستونی را از لحاظ ارتفاع و عرض، چندین برابر سطر و یا ستون دیگری تعریف کنید. به عنوان مثال سطری که خاصیت ارتفاع آن به صورت Height = 2* تعریف شده باشد، ارتفاعش دو برابر سطری است که ارتفاع آن به صورت Height = * تعریف شده باشد. به همین صورت سطری که ارتفاع آن به صورت Height=0.25* تعریف شده است، ارتفاعی به اندازه 1/8 سطری دارا که ارتفاع آن به صورت Height =2* تعریف شده است. این موضوع در مورد ستون ها و عرض آن ها نیز صدق است.
  10. 1
  11. #26
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت دوازدهم)

    ادامه کنترل گرید

    تعیین سلول برای کنترل ها ی فرزند در کنترل گرید:
    قبلا اشاره شد که دلیل اصلی اینکه کنترل گرید از قویترین و پرکاربرد ترین کنترل های کانتیتر می باشد این است که شما کنترل کاملی بر روی سطر ها وستون های گرید می توانید داشته باشید. در این قسمت به نحوه تخصیص یک سلول خاص در کنترل گرید را به یک کنترل مشخص نشان خواهم داد.
    برای تخصیص سلول خاصی از کنترل گرید به یکی از کنترل های فرزند از خواص پیوست شده Row و Column استفاده خواهیم کرد. به نمونه کد زیر دقت کنید:
    کد HTML:
    <Button Grid.Row="2" Grid.Column="2" 
    button3</Button>
    در قعه کد فوق، دکمه تعریف شده در سطر و ستون سوم ( سلول 9) در گرید مربوطه قرار خواهید گرفت.
    نکته :
    شماره سطر ها وستون ها در گرید از صفر شروع می شود. بنابرین مقدار 2 برای سطر و ستون معرف سطر و ستون سوم در گرید می باشد.
    نکته:
    چنانچه بخواهید کنترلی را در سلول اول از گرید قرار دهید، نیاز به تنظیم خواص Row و Column از گرید ندارید.
    درواقع مقدار پیش فرض این خواص، صفر می باشد که بیانگر سطر و ستون اول گرید می باشد.
    برای درک بهتر به نمونه کر زیر دقت کنید :
    کد HTML:
    <Window x:Class="Grid.Window1"
      
    xmlns="<a href="http://schemas.microsoft.com/winfx/2006/xaml" target="_blank">http://schemas.microsoft.com/winfx/2006/xaml</a>
    /presentation"
      
    xmlns:x="<a href="http://schemas.microsoft.com/winfx/2006/xa" target="_blank">http://schemas.microsoft.com/winfx/2006/xa</a>
    ml"
        Title="Window1" Height="300" Width="300">
        <Grid ShowGridLines="True">
            <!--Begin Grid Row Definitions-->
            <Grid.RowDefinitions>
                <RowDefinition ></RowDefinition> <!--
    Frist Row-->
                <RowDefinition ></RowDefinition><!--
    Second Row-->
                <RowDefinition ></RowDefinition><!--
    Third Row-->
            </Grid.RowDefinitions>
            <!--End of Grid Row Definitions-->
      
            <!--Begin Grid Column Definitions-->
            <Grid.ColumnDefinitions>
                <ColumnDefinition 
    ></ColumnDefinition><!--First Column-->
                <ColumnDefinition 
    ></ColumnDefinition><!--Second Column-->
                <ColumnDefinition 
    ></ColumnDefinition><!--Third Column-->
            </Grid.ColumnDefinitions>
            <!--End of Grid Column Definitions-->
            <!--Start Of Defining Child Controls-->
           <Button >button1</Button> <!--the Grid cell 
    of this button is 0-->      
            <Button Grid.Row="1" Grid.Column="1" 
    >button2</Button><!--the Grid cell of this button 
    is 5-->
            <Button Grid.Row="2" Grid.Column="2" 
    >button3</Button><!--the Grid cell of this button 
    is 9-->
        </Grid>
    </Window>
    هماطور که مشاهده می کنید، برای اولین دکمه خواص Row و Column تنظیم نشده اند، در نتیجه دکمه مذکور در اولین سطر و ستون از گرید قرار خواهد گرفت.
  12. 1
  13. #27
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش سوم: چیدمان و طراحی کنترل ها ( قسمت سیزدهم)

    پایان کنترل گرید (سورس مثال ها را در پایان همین پست می توانید دانلود کنید)
    محدوده سطر و ستون ها در کنترل گرید :
    در این قسمت دو خاصیت دیگر از خواص پیوست شده برای کنترل های درون کنترل گرید را مورد بررسی قرار خواهیم داد. این خواص نشان دهنده محدوده ای از تعداد سطر ها وستون هایی از گرید هستند که یک کنترل می تواند دربر گیرد. توسط این خواص می توانید کنترل بهتری بر روی عناصر و محل قرار گیری آن ها داشته باشید.

    خاصیت RowSpan :
    توسط این خاصیت می توانید مشخص کنید که کنترلی چند سطر از سطر های گرید را می تواند در بر گیرد. به عنوان مثال قطعه کد زیر :
    کد HTML:
    <Grid ShowGridLines="True">
        <!--Begin Grid Row Definitions-->
        <Grid.RowDefinitions>
            <RowDefinition ></RowDefinition>
            <!--Frist Row-->
            <RowDefinition ></RowDefinition>
            <!--Second Row-->
            <RowDefinition ></RowDefinition>
            <!--Third Row-->
        </Grid.RowDefinitions>
        <!--End of Grid Row Definitions-->
        <!--Begin Grid Column Definitions-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition ></ColumnDefinition>
            <!--First Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Second Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Third Column-->
        </Grid.ColumnDefinitions>
        <!--End of Grid Column Definitions-->
        <!--Start Of Defining Child Controls-->
        <Button >button1</Button>
        <!--the Grid cell of this button is 0-->
        <Button Background="GreenYellow" Grid.Row="0" 
    Grid.Column="1" Grid.RowSpan="3" >button2</Button>
        
        <Button Grid.Row="2" Grid.Column="2" 
    >button3</Button>
        <!--the Grid cell of this button is 9-->
    </Grid>
    در قطعه کد فوق، دکمه دوم دارای خاصیت RowSpan برابر با سه می باشد. همچنین دقت کنید که خاصیت Row آن از یک در مثال قبل به صفر در این مثال تغییر کرده است.

    خاصیت ColumnSpan :
    توسط این خاصیت می توانید مشخص کنید که کنترلی چند ستون از ستون های گرید را می تواند در بر گیرد. به عنوان مثال قطعه کد زیر :
    کد HTML:
    <Grid ShowGridLines="True">
        <!--Begin Grid Row Definitions-->
        <Grid.RowDefinitions>
            <RowDefinition ></RowDefinition>
            <!--Frist Row-->
            <RowDefinition ></RowDefinition>
            <!--Second Row-->
            <RowDefinition ></RowDefinition>
            <!--Third Row-->
        </Grid.RowDefinitions>
        <!--End of Grid Row Definitions-->
        <!--Begin Grid Column Definitions-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition ></ColumnDefinition>
            <!--First Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Second Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Third Column-->
        </Grid.ColumnDefinitions>
        <!--End of Grid Column Definitions-->
        <!--Start Of Defining Child Controls-->
        <Button >button1</Button>
        <!--the Grid cell of this button is 0-->
        <Button Background="GreenYellow" Grid.Row="1" 
    Grid.Column="0" Grid.ColumnSpan="3" 
    >button2</Button>
        
        <Button Grid.Row="2" Grid.Column="2" 
    >button3</Button>
        <!--the Grid cell of this button is 9-->
    </Grid>
    در قطعه کد فوق، دکمه دوم دارای خاصیت ColumnSpan برابر با سه می باشد. همچنین دقت کنید که خاصیت Column آن از یک در مثال قبل به صفر در این مثال تغییر کرده است.
    نمونه کد زیر نحوه استفاده از خواص RowSpan و ColumnSpan و نتیجه آن را در شکل بعد از آن نشاند می دهد.
    کد HTML:
    <Grid ShowGridLines="True">
        <!--Begin Grid Row Definitions-->
        <Grid.RowDefinitions>
            <RowDefinition ></RowDefinition>
            <!--Frist Row-->
            <RowDefinition ></RowDefinition>
            <!--Second Row-->
            <RowDefinition ></RowDefinition>
            <!--Third Row-->
            <RowDefinition ></RowDefinition>
            <!--Fourth Row-->
        </Grid.RowDefinitions>
        <!--End of Grid Row Definitions-->
        <!--Begin Grid Column Definitions-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition ></ColumnDefinition>
            <!--First Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Second Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Third Column-->
            <ColumnDefinition ></ColumnDefinition>
            <!--Fourth Column-->
        </Grid.ColumnDefinitions>
        <!--End of Grid Column Definitions-->
        <!--Start Of Defining Child Controls-->
        <Button >button1</Button>
       
        <Button Background="GreenYellow" Grid.Row="1" 
    Grid.Column="0" Grid.ColumnSpan="4" 
    Grid.RowSpan="2" >
            button2</Button>      
        <Button Grid.Row="3" Grid.Column="3" 
    >button3</Button>
        
    </Grid>
    پ و1:
    کنترل گرید از مهمترین و پر کاربرد ترین کنترل های کانتینر در WPF می باشد. پس تمرکز زیادی بر آن داشته باشید و سعی کنید که کاملا بر آن و نحوه استفاده از ان مسلط شوید

    پ و2:
    از بابت فاصله زیادی که بین پست ها افتاد؛ پوزش می طلبم. گرفتاری پیش آمده بود.. اگر باز هم تاخیر چند روزه داشتم، نگران نباشید و مطمئنا این تاپیک به جاهای خوبی خوهد رسید(انشاء الله)
    ایام به کامتان
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar Grid.rar (68.9 کیلو بایت, این فایل 2 مرتبه دانلود شده است )
  14. 1
  15. #28
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش چهارم: Content Controls ( کنترل های محتوا) ( قسمت اول)

    پیش گفتار:
    در بخش قبلی با کنترل های کانتینر که اساس برنامه نویسی در WPF محسوب می شوند، آشنا شدید. توسط آن ها توانستید پنجره های خود را به قسمت های مختلف تقسیم کنید، و کنترل های خود را درون قسمت های مختلف قرار دهید و برنامه ها یی ایجاد کنید که وابسته به رزولوشن صفحه نمایش نبوده و در محدوده وسیعی از مانیتور ها با رزولوشن های مختلف قابل استفاده باشد.

    کنترل های کانتینر، تنها امکانات WPF برای نگهداری کنترل های فرزند نیستند. تکنولوژی WPF مدل دیگری از مفهوم محتوا را ارائه می کند که در این بخش به آن ها خواهیم پرداخت.
    در این مدل جدید، می توانید درون کنترل های ساده ای مانند Button ، کنترل های دیگری مانند TextBox ، Label، و یا ترکیبی از این کنترل ها را قرار دهید. همچنین قادر خواهید بود، اشکال برداری و کنترل های دیگر را درون این کنترل با مدیریت بسیار بالایی قرار دهید.

    مفهوم Content در WPF :
    در تکنولوژی WPF مفهوم عناصر کمی متفاوت با مفهوم کنترل می باشد. به هر چیزی که شما در پنجره های برنامه خود در WPF قرار می دهید، یک عنصر تلقی می شود، در حالی که کنترل ها عناصر ویژه ای هستند که می تواننئد نسبت به اعمال کاربر، عکس العمل نشان دهند. مثلا می توانند ورودی های کاربر را دریافت کنند، خروجی ها ی برنامه را به کاربر بفرستند و ...

    کنترل های Content، نمونه خاص دیگری از عناصر در تکنولوژی WPF می باشند که قابلیت دربرگیری و نمایش مقادیری را دارند که ما به آن ها محتوا می گوییم و به کنرل هایی که این خاصیت را شامل می شوند، کنترل های محتوا می گوییم. در واقع هر کنترل محتوا می توانند تنها یک عنصر داخلی را درون خود قرار دهند. به همین جهت، تفاوتی بین کنترل های محتوا و کنترل های کانتینر وجود دارد. کنترل های کانتیر می توانند، صفر، یک و یا چندین کنترل را به عنوان کنترل های داخلی و کنترل های فرزند خود در برگیرند.

    نکته:
    البته این گفته که کنترل های محتوا می توانند، تنها یک عنصر به عنوان عنصر داخلی خود بپذیرند، آن ها را محدود نمی کند. در واقع شما می توانید، با به کارگیریی کنترل های کانتینر، عناصر و کنترل های بسیاری را درون یک کنترل محتوا نشان دهید.

    به عنوان مثال، عکس زیر نمونه ای از یک عنصر ToolTip را نشاند می دهد. همانطور که می دانید ایجاد چنین عنصری در دات نت 2.0 نیاز به کد نویسی زیادی دارد. ضمن اینکه عکس زیر حالت ساده ای از نحوه استفاده از Content مب باشد

    همانطور که اشاره شد، کنترل های کانتینر از کلاس انتزاعی پایه ای به نام Panel ارث بری می کنند، کنترل های محتوا نیز از کلاس انتزاعی به نام ContentControl ارث بری می کنند. این موضوع در شکل زیر نشان داده شده است.
    به عنوان مثال کنترل ScrollViewer یکی از کنترل های محتوایی می باشد که قابلیت اسکرول را نیز دارا می باشد. یا کنترل های کاربری که می توانند گروهی از کنترل ها را جهت قابلیت استفاده مجدد درون خود جمع کنند.

    به طور کلی، کنترل های محتوا به دو دسته زیر تقسیم می شوند:
    الف ) دسته اول، کنترل هایی هستند که به آن ها اشاره شد. این کنترل ها دارای بخشی به نام Content می باشند که می توانند یک عنصر را به عنوان محتوای خود درون خود نگهداری کنند. حال این عنصر می تواند یک رشته متنی باشد و یا می تواند مجموعه ای از کنترل های متفاوت بر روی یک کنترل کانتیر باشند.

    ب) دسته دوم، کنترل هایی هستند که علاوه بر داشتن خاصیت کنترل های دسته اول، دارای بخش دیگری به نام Header می باشند که عملی مانند بخش Content را انجام می دهند. از این کنترل ها می توان به کنترل TabItem ، کنترل GroupBox، Expander و ... اشاره کرد که در بخش های آتی با آن ها آشنا خواهید شد.
  16. 1
  17. #29
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش چهارم: Content Controls ( کنترل های محتوا) ( قسمت دوم)

    خاصیت Content :
    هر کنترل محتوا، دارای خاصتی به نام Content می باشد. این خاصیت در برگیرنده عناصری خواهد بود که به عنوان محتوای کنترل مورد نظر شناخته می شوند.
    به طور کلی خاصیت Content در کنترل های محتوا، می تواند شامل دو دسته کلی زیر از عناصر WPF باشد:
    الف) دسته اول عناصری هستند که از کلاس UIElement ، ارث بری نمی کنند. در این موارد، متد ToString() فراخوانی شده تا متن آن عنصر را به عنوان محتوای عنصر مورد نظر قرار دهد.

    ب) دسته دم عناصری که از کلاس UIElement ارث بریم می کنند. این عناصر در واقع تمامی عناصر و.یژوال در WPF را شامل می شوند. کمپایلر از متد OnRender این عناصر استفاده می کند تا قابل نمایش در کنترل محتوا با شند.

    برای درک بهتر این موضوع به دو قطعه کد زیر دقت کنید :
    کد HTML:
    <Button HorizontalAlignment="Center" VerticalAlignment="Center">this a simple text Content</Button>
    کد فوق تنها یک رشته متنی را به عنوان محتوای عنصر Button در نظر گرفته است. این نوع از محتوا، از نوع دسته (الف) می باشد.
    در واقع می توان در این حالت، خاصیت Content را به خاصیت Text عناصر در دات نت فریم ورک 2.0 تشبیه کرد. البته دقت داشته باشید که این مورد صرفا یک تشبیه می باشد.

    حال به کد زیر دقت کنید :
    کد HTML:
    <Button><Image Source="./Images/WPF.jpg"></Image></Button>
    کد فوق یک عکس را به عنوان محتوای Button معرفی می کند. این نمونه از محتوا، ار نوع دسته (ب) می باشد که با فراخوانی متد OnRender، عکس مورد نظر قابل نمایش در کنترل Button به عنوان محتوا گردیده است.
    دو قطعه کد فوق از ساده ترین، حالت های خاصیت Content بودند. درواقع قدرت این خاصیت بسیار فراتر از قرار گیری یک عکس و یا یک رشته متنی درون آن می باشد. با استفاده از کنترل های کانتینر می توانید کنترل های بسیاری را در یک Button و یا هر کنترل محتوای دیگر قرار دهید.
    به قطعه کد زیر دفت کنید :
    کد HTML:
    <Window x:Class="ContentControlsInWPF.TextAndImageContent"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="TextAndImageContent" Height="300" Width="300"><Grid><Button VerticalAlignment="Center" HorizontalAlignment="Center"><StackPanel><Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill"  Source="./Images/WPF.jpg"></Image><TextBlock TextAlignment="Center" >Fill Boxes And then Click Ok</TextBlock><StackPanel Orientation="Horizontal"><Label MinWidth="50">name</Label><TextBox MinWidth="120"></TextBox></StackPanel><StackPanel Orientation="Horizontal"><Label MinWidth="50">Family</Label><TextBox MinWidth="120"></TextBox></StackPanel><Button>Ok</Button><Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill"  Source="./Images/WPF.jpg"></Image></StackPanel></Button></Grid></Window>
    در قطعه کد فوق، یک Button در کنترل کانتینر اصلی فرم یعنی گرید قرار گرفته است. در خاصیت Content کنترل Button یک کنترل StackPanel قرار گرفته ایت که خود شامل پنج کنترل فرزند به شزح زیر می باشد:
    ابتدا یک عنصر Image ، در بالاترین قسمت کنترل StackPanel قرار گرفته است. سپس یک کنترل TextBlock با متن Fill Boxes And then Click Ok قرار گرفته است. پس از آن دو کنترل StackPanel داخلی به مجموعه کنترل های فرزند اضافه شده اند.
    هر یک از این دو کنترل StackPanel داخلی خود شامل دو کنترل فرزند می باشند، که به صورت افقی در کنترل کانتینر خود قرار گرفته اند.
    پس از دو کنترل StackPanel داخلی، یک کنترل Button و در نهایت یک عنصر Image دیگر قرار داده شده است.
    همانطور که در شکل فوق نیز مشاهده می کنید، به راحتی می توان با بهره گیری از کنترل های کانتینر، به تعداد دلخواهی از کنترل های WPF را در یک کنترل محتوا قرار داد. از این خاصیت می توان در ساخت کنترل های سفارشی و کنترل های کاربری بهره بسیاری برد.
  18. 1
  19. #30
    javanr0d
    پاسخگو و راهنما
    تاریخ عضویت
    1970 Jan
    محل سکونت
    VisualStudio
    نوشته ها
    192
    45
    161

    بخش چهارم: Content Controls ( کنترل های محتوا) ( قسمت سوم)

    کنترل های محتوا با خواص ویژه :
    همانطور که پیش تر نیز اشاره کردم، در WPF کنترل های بسیاری وجود دارد که علاوه بر قابلیت محتوایی بودن، دارای یک سری خواص کاربردی دیگری می باشند که می توانند محتویات خودشان را به خوبی مدیریت کنند. تعدادی از این کنترل ها که در ادامه به آن ها خواهم پرداخت، عبارتند از :

    کنترل ScrollViewer :

    این کنترل امکاناتی را در اختیار شما قرار می دهد که بتوانید با آن ها، محتوبات این کنترل را مدیریت کنید. چنانچه محتویات داخلی این کنترل از مقدار فضای موجود بر روی ان بیشتر باشد، کنترل به صورت اتوماتیک Scroll پیدا کرده تا بتواند همه محتویات خود را به خوبی در بر گیرد.

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

    کنترل TabControl :
    نمونه این کنترل نیز در نسخه 2.0 دات نت فریم ورک وجود دارد. در اینجا قابلیت های بسیاری به این کنترل اضافه شده است که در جای خود، توضیح داده خواهند شد.

    کنترل Expander :
    این کنترل، همواره یکی از کنترل هایی بوده است که برنامه نویسیان علاقه زیادی به استفاده از آن دارند. این کنترل در دات نت فریم ورک 2.0 و نسخه های قبل از آن وجود نداشت و برنامه نویسان یا اقدام به نوشتن این کنترل می کردند و یا از کنترل های نوشته شده توسط اشخاص ثالث استفاده می کرند. نمونه این کنترل در ویندوز بسیار استفاده شده است.

    حال، در ادامه به توضیح هر یک از این کنترل ها با ذکر مثال هایی در مورد هر یک خواهیم پرداخت:

    کنترل ScrollViewer :
    همانطور که در بخش قبلی ملاحظه کردید، تعدادی کنترل را به عنوان محتوای کنترل Button قرار دادیم. حال اگر تعداد این کنترل ها، زیاد شود و کنترل Button فضای لازم را برای آن ها نداشته باشد، نمی تواند همه محتویات خود را به درستی نشان دهد.

    در این مواقغ از کنترل دیگری به نام کنترل ScrollViewer استفاده می کنیم. این کنترل می توان با هر عنصری به کار رود. زمانی که محتویات این کنترل از فضای موجود، بیشتر شود، این کنترل به صورت اتوماتیک ، محتویات خود را قابل پیمایش کرده و کاربر می تواند با اسکرول کردن، به تمامی محتویات درون کنترل مورد نظر دسترسی داشته باشد.
    به قطعه کد زیر که اصلاح شده تکه کد قبل می باشد توجه کنید:
    کد HTML:
    <Window x:Class="ContentControlsInWPF.ContentWithScrollVie  werFeature"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ContentWithScrollViewerFeature" Height="300" Width="300">
        <Grid>
            <Button VerticalAlignment="Center" HorizontalAlignment="Center">
                <ScrollViewer>
                    <StackPanel>
                        <Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill"  Source="./Images/WPF.jpg"></Image>
                        <TextBlock TextAlignment="Center" >Fill Boxes And then Click Ok</TextBlock>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">name</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">Family</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">Age</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">Country</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">City</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">State</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">P__Code</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">Address</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label MinWidth="50">Phone</Label>
                            <TextBox MinWidth="120"></TextBox>
                        </StackPanel>
                        <Button>Ok</Button>
                        <Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill"  Source="./Images/WPF.jpg"></Image>
                    </StackPanel>
                </ScrollViewer>
            </Button>
     
        </Grid>
    </Window>
    این مثال، مانند مثال قبلی می باشد با این تقاوت که کنترل های بیشتری درون محتوای کنترل Button قرار گرفته اند. علاوه بر این، تمامی محتویات کنترل Button درون کنترل دیگری به نام ScrollViewer قرار گرفته است.
    چنانچه فضای لازم برای نمایش تمامی محتویات کنترل Button موجود باشد، کنترل ScrollViewer غیر فعال می شود و زمانی که فضای لازم برای نمایش کنترل های درونی کنترل Button مجود نباشد، کنترل ScrollViewer به صورت اتوماتیک فعال شده تا بتواند تمامی محتویات کنترل Button را نمایش دهد.
    این کنترل بسیار پر کاربرد می باشد. به این دلیل که علاوه بر اینکه غیر وابستگی برنامه شما به رزولوشن صفحه نمایش حفظ می گردد، باعث می شود که بتوانید تعداد بسیاری از کنترل ها را درون یک کنترل محتوایی قرار دهید.
    نکته :
    توسط دو خاصیت HorizontalScrollBarVisibility و VerticalScrollBarVisibility می توانید کنترل بیشتری بر روی عملکرد کنترل ScrollViewer داشته باشید. هر یک از این خواص دارای چهار مقدار می باشند که در زیر به توضیح هریک خواهیم پرداخت :

    1-مقدار Auto : این مقدار باعث می شود که نوار های اسکرول ( برای هر کدام که تنظیم شده باشد) در حالتی که غیر فعال هستند، نشان داده نشوند.

    2-مقدار Disabled : این مقدار باعث می شود که نوار های اسکرول همیشه در حالت غیر فعال باشند.

    3-مقدار Hidden : این مقدار باعث می شود که نوار های اسکرول ( برای هر کدام که تنظیم شده باشد) مخفی باشند. در این حالت می توانید عمل اسکرول را با کلید های جهت نما انجام دهید و یا با کلید Tab بین کنترل ها حرکت کنید که در این صورت زمانی که به کنترلی می رسید که در محدوده فضایی کنترل مورد نظر ( در مثال قبلی Button ) نیست، عمل اسکرول به صورت اتوماتیک انجام می شود.

    4-مقدار Visible : این گزینه که مقدار پیش فرض برای هر دوخاصیت نیز می باشد، در زمانی که اسکرول در حالت غیر فعال می باشد، همچنان به صورت Visible هستند و کاربر می تواند آن ها را مشاهده نماید.
  20. 1
صفحه 3 از 4 نخست 1234 آخرین
نمایش نتایج: از 21 به 30 از 35

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

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

Content Relevant URLs by vBSEO 3.6.0 RC 2