سئوالات و مباحث WPF

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، وقتی یه Resource ای در تگ ای تعریف میکنیم ، اول بخش Resource در اون تگ اجرا میشه و بعد خود همون تگ . درسته؟
مثلا در کد زیر :

XML:
<Application x:Class="PoshtibangirTolo.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:PoshtibangirTolo"
             StartupUri="Elements\Windows\MainWindow.xaml">

    <Application.Resources>
   
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resource\Style_Template\StyleResource.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
   
    </Application.Resources>

</Application>

اول بخش Resources اجرا و بنابراین StyleResource.xaml لود میشه و بعد کدهای بخش Application اجرا و StartupUri اجرا میشه . درسته؟
در XAML چیزی اجرا نمیشه، زبان برنامه نویسی نیست که چیزی اجرا بشه. صرفا توصیف ئه. با همون ترتیب بالا به پایین پردازش میشه و میاد پایین. هی به بالا و پایین پرش نمی کنه، نمیشه که صفات تگ Application رو پردازش نکرده بپره به تگ ResourceDictionary داخلی و بعد مجددا برگرده به تگ بالایی.

-------------------------------------------

و همچنین در کد زیر :

XML:
            <CustomControls:ShapeTextButton  x:Name="CloseButton" DockPanel.Dock="Right" Margin="0,0,10,0" Width="24" Height="24">
                <CustomControls:ShapeTextButton.Resources>
                    <Path x:Key="CloseData" Data="M1,1  L23,23  M23,1  L1,23"/>
                </CustomControls:ShapeTextButton.Resources>

                <CustomControls:ShapeTextButton.DefaultButtonShape>
                    <Path StrokeStartLineCap="Triangle" StrokeEndLineCap="Triangle" Stroke="{Binding  ElementName=CloseButton, Path=Foreground}" StrokeThickness="2" Data="{Binding Source={StaticResource CloseData}, Path=Data}"/>
                </CustomControls:ShapeTextButton.DefaultButtonShape>
            </CustomControls:ShapeTextButton>

اگه بخوام پروپرتیِ Stroke ئه Path (که مربوط به مقدار پروپرتی DefaultButtonShape هست) را به پروپرتیِ Foreground ئه شیِ ShapeTextButton (که نامش CloseButton هست) متصل کنم ، :
چه کدی باید بنویسم؟
و همچنین چرا کد بالا (Binding اش) کار نمیکنه؟ (ارور نمیده اما عمل هم نمیکنه) .
قاعدتا Binding ای که برای Stroke نوشته اید مشکلی نداره، همانطور که ایرادی در این مثال نیست :
XML:
    <Grid>
        <Button x:Name="CloseButton" Foreground="Red">
            <Grid Width="50" Height="50">
                <Ellipse Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2"/>
            </Grid>
        </Button>
    </Grid>

و همچنین اگه بجای مشخص کردن ElementName در کد بالا (برای Binding) ، بخوام از RelativeSource استفاده کنم ، کدش چجوری میشه؟ کد را بصورت زیر نوشتم اما باز هم کار نکرد :

XML:
Stroke="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type CustomControls:ShapeTextButton}}, Path=Foreground}"
این مثال هم نشون میده که ایراد مربوط به RelativeSource نیست.
XML:
    <Grid>
        <Button x:Name="CloseButton" Foreground="Red">
            <Grid Width="50" Height="50">
                <Ellipse Stroke="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}, Path=Foreground}" StrokeThickness="2"/>
            </Grid>
        </Button>
    </Grid>
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
در XAML چیزی اجرا نمیشه، زبان برنامه نویسی نیست که چیزی اجرا بشه. صرفا توصیف ئه. با همون ترتیب بالا به پایین پردازش میشه و میاد پایین. هی به بالا و پایین پرش نمی کنه، نمیشه که صفات تگ Application رو پردازش نکرده بپره به تگ ResourceDictionary داخلی و بعد مجددا برگرده به تگ بالایی.

خیلی ممنون استاد .
اگه این طور باشه ، پس اول باید کد StartupUri را پردازش کنه (نمیدونم فرق پردازش با اجرا چیه) .
StartupUri را هم که پردازش کنه ، پس اول window اصلی wpf مون را اجرا میکنه .
بعد میاد اون Style هایی که داده بودیم را اجرا میکنه (اما چون استایل ها را بصورت StaticResource از داخل پروپرتیِ Style ئه Window مون متصل کرده بودیم ، زمانی درست کار میکنه که اول ، استایل هامون (همون DarkStyle و LightStyle) لود شده باشن) .

قاعدتا Binding ای که برای Stroke نوشته اید مشکلی نداره، همانطور که ایرادی در این مثال نیست :
XML:
    <Grid>
        <Button x:Name="CloseButton" Foreground="Red">
            <Grid Width="50" Height="50">
                <Ellipse Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2"/>
            </Grid>
        </Button>
    </Grid>


این مثال هم نشون میده که ایراد مربوط به RelativeSource نیست.
XML:
    <Grid>
        <Button x:Name="CloseButton" Foreground="Red">
            <Grid Width="50" Height="50">
                <Ellipse Stroke="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Button}, Path=Foreground}" StrokeThickness="2"/>
            </Grid>
        </Button>
    </Grid>

خیلی ممنون استاد .
پس چرا در پروژه ای که پیوست کردم ، برای من وقتی که Stroke را Binding کردم ، کار نمیکنه؟
ارور نمیده اما کار هم نمیکنه؟
اما وقتی مقدار Stroke ئه Path را بایند نکنیم و مثلا یه مقدار لیترال (مثلا سفید و ...) بدیم ، کار میکنه .
تشکر استاد
 

پیوست ها

  • New_WPF.rar
    112 کیلوبایت · بازدیدها: 1
آخرین ویرایش:

the_king

مدیرکل انجمن
خیلی ممنون استاد .
اگه این طور باشه ، پس اول باید کد StartupUri را پردازش کنه (نمیدونم فرق پردازش با اجرا چیه) .
StartupUri را هم که پردازش کنه ، پس اول window اصلی wpf مون را اجرا میکنه .
بعد میاد اون Style هایی که داده بودیم را اجرا میکنه (اما چون استایل ها را بصورت StaticResource از داخل پروپرتیِ Style ئه Window مون متصل کرده بودیم ، زمانی درست کار میکنه که اول ، استایل هامون (همون DarkStyle و LightStyle) لود شده باشن) .
اینکه مقدار یک مشخصه در XAML تعیین بشه به این معنا نیست که باید حتما همون لحظه از اون مشخصه استفاده بشه یا شیء برای تگ ای که توصیف میشه ساخته بشه. هر کلاسی هم خودش تعیین می کنه که کی از مشخصه هایش استفاده کنه. پردازش XAML هم موقع کامپایل برنامه است، نه موقع اجرای برنامه. فرق بین زمان کامپایل و زمان اجرا رو که میدونید. در XAML فرضا مشخصات یک شیء از کلاس Application توصیف شده، مقدار مشخصه StartupUri اش هم تعیین شده. اما به این معنی نیست که همون موقع پردازش XAML بیاد برای مشخص شدن مقدار StartupUri چیزی اجرا کنه یا روال اجرای کلاس Application رو ترتیب توصیف شما در XAML تغییر بده.

خیلی ممنون استاد .
پس چرا در پروژه ای که پیوست کردم ، برای من وقتی که Stroke را Binding کردم ، کار نمیکنه؟
ارور نمیده اما کار هم نمیکنه؟
اما وقتی مقدار Stroke ئه Path را بایند نکنیم و مثلا یه مقدار لیترال (مثلا سفید و ...) بدیم ، کار میکنه .
تشکر استاد
چون توصیف داخل ShapeTextButton.DefaultButtonShape ئه که در ظاهر ازش استفاده نمیشه.
XML:
        <CustomControls:ShapeTextButton x:Name="CloseButton" Foreground="Red" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="550,20,0,0" Width="24" Height="24">
            <CustomControls:ShapeTextButton.Resources>
                <Path x:Key="CloseData" Data="M1,1  L23,23  M23,1  L1,23"/>
            </CustomControls:ShapeTextButton.Resources>
            <Grid>
                <Path Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2" Data="{Binding Source={StaticResource CloseData}, Path=Data}"/>
            </Grid>
        </CustomControls:ShapeTextButton>
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اینکه مقدار یک مشخصه در XAML تعیین بشه به این معنا نیست که باید حتما همون لحظه از اون مشخصه استفاده بشه یا شیء برای تگ ای که توصیف میشه ساخته بشه. هر کلاسی هم خودش تعیین می کنه که کی از مشخصه هایش استفاده کنه. پردازش XAML هم موقع کامپایل برنامه است، نه موقع اجرای برنامه. فرق بین زمان کامپایل و زمان اجرا رو که میدونید. در XAML فرضا مشخصات یک شیء از کلاس Application توصیف شده، مقدار مشخصه StartupUri اش هم تعیین شده. اما به این معنی نیست که همون موقع پردازش XAML بیاد برای مشخص شدن مقدار StartupUri چیزی اجرا کنه یا روال اجرای کلاس Application رو ترتیب توصیف شما در XAML تغییر بده.

خیلی ممنون استاد .

چون توصیف داخل ShapeTextButton.DefaultButtonShape ئه که در ظاهر ازش استفاده نمیشه.
XML:
        <CustomControls:ShapeTextButton x:Name="CloseButton" Foreground="Red" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="550,20,0,0" Width="24" Height="24">
            <CustomControls:ShapeTextButton.Resources>
                <Path x:Key="CloseData" Data="M1,1  L23,23  M23,1  L1,23"/>
            </CustomControls:ShapeTextButton.Resources>
            <Grid>
                <Path Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2" Data="{Binding Source={StaticResource CloseData}, Path=Data}"/>
            </Grid>
        </CustomControls:ShapeTextButton>

خیلی ممنون استاد .
اگه منظورتون از استفاده نشدن ، مقداردهی پروپرتی DefaultButtonShape هست که من مقداردهی کرده بودم :

XML:
        <CustomControls:ShapeTextButton x:Name="CloseButton" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="550,20,0,0" Width="24" Height="24">
            <CustomControls:ShapeTextButton.Resources>
                <Path x:Key="CloseData" Data="M1,1  L23,23  M23,1  L1,23"/>
            </CustomControls:ShapeTextButton.Resources>
           
            <CustomControls:ShapeTextButton.DefaultButtonShape>
                <Path Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2" Data="{Binding Source={StaticResource CloseData}, Path=Data}"/>
            </CustomControls:ShapeTextButton.DefaultButtonShape>
        </CustomControls:ShapeTextButton>

اگه منظورتون اینه که پروپرتی DefaultButtonShape ، در کدهای سی شارپ (در کلاس ShapeTextButton) ، بدنه نداره برای عملیات خاصی ، جواب اینه که در اونجا لزومی ندیدم که استفاده کنم . بجاش در Template ای که مربوط به این کلاس میشد (در تمپلیت با نام کلید ShapeTextButtonTemplate در فایل TemplateResource.xaml) ، از این پروپرتی استفاده کردم .

به هر حال ، من در این نوع ساختار لازم دارم بایندینگ انجام بدم (میخوام از پروپرتی DefaultButtonShape استفاده کنم) .
برای این کدی که دادم ، راهی برای بایندینگ برای پروپرتی Stroke ئه DefaultButtonShape ، وجود نداره؟
تشکر استاد .
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .



خیلی ممنون استاد .
اگه منظورتون از استفاده نشدن ، مقداردهی پروپرتی DefaultButtonShape هست که من مقداردهی کرده بودم :

XML:
        <CustomControls:ShapeTextButton x:Name="CloseButton" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="550,20,0,0" Width="24" Height="24">
            <CustomControls:ShapeTextButton.Resources>
                <Path x:Key="CloseData" Data="M1,1  L23,23  M23,1  L1,23"/>
            </CustomControls:ShapeTextButton.Resources>
          
            <CustomControls:ShapeTextButton.DefaultButtonShape>
                <Path Stroke="{Binding ElementName=CloseButton, Path=Foreground}" StrokeThickness="2" Data="{Binding Source={StaticResource CloseData}, Path=Data}"/>
            </CustomControls:ShapeTextButton.DefaultButtonShape>
        </CustomControls:ShapeTextButton>

اگه منظورتون اینه که پروپرتی DefaultButtonShape ، در کدهای سی شارپ (در کلاس ShapeTextButton) ، بدنه نداره برای عملیات خاصی ، جواب اینه که در اونجا لزومی ندیدم که استفاده کنم . بجاش در Template ای که مربوط به این کلاس میشد (در تمپلیت با نام کلید ShapeTextButtonTemplate در فایل TemplateResource.xaml) ، از این پروپرتی استفاده کردم .

به هر حال ، من در این نوع ساختار لازم دارم بایندینگ انجام بدم (میخوام از پروپرتی DefaultButtonShape استفاده کنم) .
برای این کدی که دادم ، راهی برای بایندینگ برای پروپرتی Stroke ئه DefaultButtonShape ، وجود نداره؟
تشکر استاد .

استاد ، کلا میخوام وقتی اون DarkStyle را به عنوان استایل Window مشخص کردم ، پروپرتیِ Stroke ئه DefaultButtonShape ، همون مقداری بشه که پروپرتیِ Foreground ئه ShapeTextButton هست .
حالا با بایند کردن یا هر روش دیگه ای که نمیدونم .
این کار شدنی هه؟

تشکر
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد ، یه کاری نمیشه کرد که مثلا من در اون استایل ها (مثلا در DarkStyle) ، مقدار پروپرتی DefaultButtonShape را مقداردهی کنم (یعنی شی ای از Path بدم) اما فقط Data ئه اون Path را ندم . بعد کاربر بتونه زمانی که از این کنترل استفاده میکنه ، در صورت تمایل ، مقدار Data ئه DefaultButtonShape را در کد xaml بده یا اینکه کلا میخواد هم بتونه کلا شی جدید از DefaultButtonShape بده (مخیل به انتخاب یکی از این 2 حالت باشه) .

اگه شدنی هست (حداقل بصورت عادی نمیشه کاری کرد که پروپرتی Data ئه DefaultButtonShape را در کد xaml مقداردهی کرد) ، روند انجامش چجوری هه؟
اگه شدنی نیست ، کلا راهی که به ذهن تون میرسه که احیانا بشه درون استایل (مثلا در استایل DarkStyle) را که فراخونی میکنیم ، کدی نوشت که باعث بشه رنگ پیش فرض در شی Path مشخص بشه ، چجوری میشه؟ اصلا شدنی هه؟

تشکر استاد
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد ، حل کردم .
یه پروپرتی فلگ گذاشتم تا در صورت true بودن ، از بِراش پروپرتی هایی که از نوع Brush درون کلاسی که ساختم ، استفاده کنن .

استاد ، کجا رفتین؟
نیستین؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد استاد .
بودن را باشین . :) :rose:

استاد ، میگم چرا درون کنترل Canvas ، اگه یه Path ای تعریف کنیم و بعد مقدار RenderTransform ئه Canvas را تغییر بدیم ، کل شکل اون Path ، به همون اندازه ای که scale کرده بودیم ، کوچیک و بزرگ میشه (که من همین حالت را میخوام) اما وقتی همین کار را در کنترل های دیگه (مثلا در کنترل دکمه) انجام بدیم ، بجای scale شدن کل Path ، فقط بخشی که در محدوده ی اون کنترل جا میشه ، بزرگ میشه :

XML:
            <Canvas DockPanel.Dock="Right" Margin="0,0,50,0" >
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="0.08" ScaleY="0.08"/>
                    </TransformGroup>
                </Canvas.RenderTransform>
                <Path Fill="Red"  Data="M224.000,0.000 C287.358,1.953 257.650,41.088 292.000,64.000 C327.922,87.961 365.918,41.653 387.000,58.000 C438.116,97.636 376.559,115.749 395.000,162.000 C407.433,193.184 442.514,186.325 462.000,209.000 C462.333,221.999 462.667,235.001 463.000,248.000 C457.372,265.398 408.127,269.292 395.000,297.000 C379.119,330.520 412.679,348.077 408.000,380.000 C399.667,387.999 391.332,396.001 383.000,404.000 C357.699,414.026 338.789,380.238 312.000,387.000 C269.638,397.694 274.289,453.766 249.000,459.000 C186.915,471.850 209.838,410.751 178.000,396.000 C133.396,375.335 106.096,414.201 85.000,404.000 C31.483,378.121 92.379,327.703 69.000,288.000 C55.793,265.572 17.073,268.558 5.000,246.000 C-19.300,200.594 62.392,190.361 73.000,163.000 C86.116,129.171 58.922,119.766 58.000,86.000 C120.910,17.887 106.853,89.816 166.000,69.000 C200.573,56.832 192.122,15.842 224.000,0.000 ZM224.000,116.000 C200.372,124.236 184.580,126.850 166.000,140.000 C164.000,141.000 162.000,142.000 160.000,143.000 C144.268,154.114 130.051,180.245 126.000,202.000 C109.383,291.249 169.236,350.151 252.000,342.000 C357.066,331.652 373.550,177.441 298.000,135.000 C276.691,123.030 257.408,118.447 224.000,116.000 Z"/>

            </Canvas>

نمیشه یه کاری کرد که در کنترل های دیگه (مثل دکمه) که این کار را میکنیم ، مثل کنترل Canvas (کل Path) تغییر اندازه بده؟
یا راهکار دیگه ای برای این عمل در کنترل های دیگه (مثل دکمه) وجود داره؟
اگه آره ، چه راهکاری؟

تشکر استاد
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد استاد .
بودن را باشین . :) :rose:

استاد ، میگم چرا درون کنترل Canvas ، اگه یه Path ای تعریف کنیم و بعد مقدار RenderTransform ئه Canvas را تغییر بدیم ، کل شکل اون Path ، به همون اندازه ای که scale کرده بودیم ، کوچیک و بزرگ میشه (که من همین حالت را میخوام) اما وقتی همین کار را در کنترل های دیگه (مثلا در کنترل دکمه) انجام بدیم ، بجای scale شدن کل Path ، فقط بخشی که در محدوده ی اون کنترل جا میشه ، بزرگ میشه :

XML:
            <Canvas DockPanel.Dock="Right" Margin="0,0,50,0" >
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="0.08" ScaleY="0.08"/>
                    </TransformGroup>
                </Canvas.RenderTransform>
                <Path Fill="Red"  Data="M224.000,0.000 C287.358,1.953 257.650,41.088 292.000,64.000 C327.922,87.961 365.918,41.653 387.000,58.000 C438.116,97.636 376.559,115.749 395.000,162.000 C407.433,193.184 442.514,186.325 462.000,209.000 C462.333,221.999 462.667,235.001 463.000,248.000 C457.372,265.398 408.127,269.292 395.000,297.000 C379.119,330.520 412.679,348.077 408.000,380.000 C399.667,387.999 391.332,396.001 383.000,404.000 C357.699,414.026 338.789,380.238 312.000,387.000 C269.638,397.694 274.289,453.766 249.000,459.000 C186.915,471.850 209.838,410.751 178.000,396.000 C133.396,375.335 106.096,414.201 85.000,404.000 C31.483,378.121 92.379,327.703 69.000,288.000 C55.793,265.572 17.073,268.558 5.000,246.000 C-19.300,200.594 62.392,190.361 73.000,163.000 C86.116,129.171 58.922,119.766 58.000,86.000 C120.910,17.887 106.853,89.816 166.000,69.000 C200.573,56.832 192.122,15.842 224.000,0.000 ZM224.000,116.000 C200.372,124.236 184.580,126.850 166.000,140.000 C164.000,141.000 162.000,142.000 160.000,143.000 C144.268,154.114 130.051,180.245 126.000,202.000 C109.383,291.249 169.236,350.151 252.000,342.000 C357.066,331.652 373.550,177.441 298.000,135.000 C276.691,123.030 257.408,118.447 224.000,116.000 Z"/>

            </Canvas>

نمیشه یه کاری کرد که در کنترل های دیگه (مثل دکمه) که این کار را میکنیم ، مثل کنترل Canvas (کل Path) تغییر اندازه بده؟
یا راهکار دیگه ای برای این عمل در کنترل های دیگه (مثل دکمه) وجود داره؟
اگه آره ، چه راهکاری؟

تشکر استاد

سلامی مجدد
جواب اینه که باید بجای اینکه پروپرتی RenderTransform ئه اون کنترل (ای که Path را توش نمایش میدیدیم مثل همون Cavas یا دکمه) را تغییر بدیم ، باید مستقیما پروپرتی LayoutTransform ئه Path را تغییر بدیم .
تشکر استاد :rose:
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد استاد .
استاد ، من یه شکلی (شکل و آیکون Help) را درون فتوشاپ ، به ابعاد 24 در 24 درمیارم (کنترلم در wpf هم با همین ابعاد هست) و کد Data ئه اون شکل را میگیرم .
اما در 2 جا مشکل ایجاد میشه :

اول اینکه درون فتوشاپ ، آیکون help ، در وسط هست اما وقتی کدش را به کنترل wpf منتقل میکنم ، در واقع TranslateTransform اش قاتی میکنه و در فتوشاپ که در وسط بود ، در کنترل wpf ، به سمت چپ بالا میره که مجبور میشم TranslateTransform ئه کنترل wpf را تغییر بدم تا درست بشه .
در صورتی که اولا هر دو width و height در فتوشاپ و کنترل wpf ، یکی هست (24 در 24) و دوما این کار را برای آیکون تنظیمات هم انجام دادم اما TranslateTransform اش در کنترل wpf بهم نریخت .

دوم اینکه قبل از اینکه درون فتوشاپ ، Resize Image کنم و ابعادش را به 24 در 24 تبدیل کنم (یعنی زمانی که ابعاد اصلی شو داره) ، اگه در این صورت کد دیتای آیکون Help را بگیرم و در کنترل wpf قرار بدم ، مشکلی نیست که من هم همین را میخوام (در این صورت ، در هر دوی هم فتوشاپ و هم کنترل wpf ، آیکونم به شکل زیر هست) :


1.JPG


آیکون سمت چپ که شکل Help هست و باندش هم در تصویر مشخص هست (این زمانی هه که TranslateTransform کنترل را طبق توضیح بالا ، تغییر دادم) و کدش هم این طور میشه :


XML:
            <CustomControls:ShapeTextButton x:Name="HelpButton" DockPanel.Dock="Right" Margin="0,0,10,0" Width="24" Height="24"
                                            IsGet_ButtonShape_BrushFrom_ContentBrush="True"
                                            DefaultButtonShape="{DynamicResource HelpShape}" MouseEnterButtonShape="{DynamicResource HelpShape}" MouseDownButtonShape="{DynamicResource HelpShape}" ControlDisabledButtonShape="{DynamicResource HelpShape}">

                <CustomControls:ShapeTextButton.Resources>
                    <Path x:Key="HelpShape" Data="M199.000,0.000 C298.671,7.627 430.094,127.190 418.000,221.000 C416.492,232.698 422.356,250.832 416.000,262.000 C377.347,329.919 324.217,378.676 278.000,438.000 C267.738,451.172 269.761,468.486 264.000,487.000 C257.667,502.332 251.333,517.668 245.000,533.000 C243.667,544.332 242.333,555.668 241.000,567.000 C234.418,578.734 202.912,592.460 186.000,596.000 C153.433,602.816 120.495,517.100 133.000,479.000 C137.000,470.001 141.000,460.999 145.000,452.000 C144.333,446.334 143.667,440.666 143.000,435.000 C175.093,354.678 243.422,300.839 295.000,239.000 C309.292,221.865 346.286,165.624 332.000,135.000 C315.949,100.593 236.584,103.990 198.000,121.000 C122.599,154.241 107.262,219.379 80.000,300.000 C75.121,314.429 88.857,325.594 86.000,338.000 C85.000,337.667 84.000,337.333 83.000,337.000 C42.258,287.972 6.705,255.931 7.000,186.000 C4.667,174.668 2.333,163.332 0.000,152.000 C4.062,131.103 24.803,116.317 22.000,98.000 C56.674,75.381 70.600,42.817 112.000,23.000 C130.665,16.001 149.335,8.999 168.000,2.000 C178.332,1.333 188.668,0.667 199.000,0.000 ZM410.000,270.000 L410.000,270.000 ZM406.000,280.000 L406.000,280.000 ZM172.000,634.000 C173.000,634.333 174.000,634.667 175.000,635.000 C174.000,634.667 173.000,634.333 172.000,634.000 ZM158.000,636.000 C215.203,640.533 268.785,654.658 289.000,701.000 C290.333,712.666 291.667,724.334 293.000,736.000 C298.301,753.704 291.275,775.786 280.000,786.000 C241.457,820.917 147.159,795.087 120.000,756.000 C113.258,746.296 101.111,699.348 94.000,696.000 C96.714,684.462 114.710,668.536 125.000,671.000 C125.353,664.800 123.395,664.580 120.000,660.000 C120.333,659.000 120.667,658.000 121.000,657.000 C124.000,656.000 127.000,655.000 130.000,654.000 C126.289,650.351 126.751,650.412 127.000,642.000 C135.096,644.625 147.962,640.556 158.000,636.000 Z" RenderTransformOrigin="0.5,0.5">
                        <Path.RenderTransform>
                            <TransformGroup>
                                <TranslateTransform X="6.2" Y="0.7"/>
                            </TransformGroup>
                        </Path.RenderTransform>
                        <Path.LayoutTransform>
                            <TransformGroup>
                                <ScaleTransform ScaleY="0.028" ScaleX="0.028"/>
                            </TransformGroup>
                        </Path.LayoutTransform>
                    </Path>
                </CustomControls:ShapeTextButton.Resources>
            </CustomControls:ShapeTextButton>


اما اگه در فتوشاپ ، ابعاد را به 24 در 24 تبدیل کنم و بعد دیتای آیکون را بگیرم ، در این صورت ، در فتوشاپ ، علی الظاهر هیچ مشکلی نیست و شکل Help ، همون مثل شکل بالا هست اما در کنترل wpf که کد دیتای شکل را قرار میدم ، هر بار ، یه خط و خطوط عجیب و غریب بهش اضافه میشه . یه نمونه اش ، شکل زیر که خطی شبیه به فِلِش بهش اضافه شد :


2.JPG


شکلی شبیه فِلِش یا یه خط که در تصویر بالا اضافه شده (در وسط) (نسبت به شکل قبل) ، مشهوده .
و جالب تر اینکه هر بار که در فتوشاپ ، مجددا Make Work Path را میزنم و مجددا Resize Image میکنم ، یه خط جدید در یه جای دیگه ی تصویر ممکنه (فقط در کنترل wpf نه اینکه در فتوشاپ) اضافه بشه .
کدش هم اینه :

XML:
            <CustomControls:ShapeTextButton x:Name="HelpButton" DockPanel.Dock="Right" Margin="0,0,10,0" Width="24" Height="24"
                                            IsGet_ButtonShape_BrushFrom_ContentBrush="True"
                                            DefaultButtonShape="{DynamicResource HelpShape}" MouseEnterButtonShape="{DynamicResource HelpShape}" MouseDownButtonShape="{DynamicResource HelpShape}" ControlDisabledButtonShape="{DynamicResource HelpShape}">

                <CustomControls:ShapeTextButton.Resources>
                    <Path x:Key="HelpShape" Data="M5.679,0.808 C6.110,0.841 6.657,0.836 7.101,1.003 C8.153,1.400 10.554,3.460 11.115,4.376 C11.292,4.665 11.341,5.052 11.449,5.268 C11.505,5.305 11.561,5.343 11.617,5.380 C11.775,5.709 11.986,7.674 11.728,8.111 C11.635,8.177 11.542,8.242 11.449,8.307 C11.331,8.484 10.934,9.242 11.003,9.338 C10.723,9.677 10.124,10.630 9.777,10.815 C9.667,10.874 9.605,10.829 9.526,10.899 C9.558,11.004 9.586,10.928 9.526,11.010 C8.975,11.522 7.877,12.819 7.603,13.547 C7.566,13.826 7.528,14.105 7.491,14.383 C7.328,14.875 7.143,15.153 6.962,15.666 C6.861,15.950 6.920,16.511 6.767,16.613 C6.649,16.852 5.350,17.627 4.983,17.366 C4.391,17.141 3.571,15.487 3.784,14.551 C3.853,14.246 4.210,13.528 4.174,13.296 C4.060,12.566 4.749,12.014 5.066,11.456 C5.159,11.224 5.252,10.992 5.345,10.760 C5.610,10.351 6.011,10.066 6.348,9.728 C7.253,8.823 8.019,7.896 8.690,6.746 C9.009,6.199 9.485,5.899 9.415,5.129 C9.405,4.943 9.396,4.757 9.387,4.571 C8.967,3.684 6.702,3.714 5.652,4.181 C4.588,4.654 3.545,5.739 3.059,6.801 C2.838,7.286 2.922,7.826 2.753,8.390 C2.495,9.245 2.252,9.081 2.585,10.091 C2.567,10.137 2.548,10.184 2.530,10.230 C1.628,9.726 0.392,7.540 0.160,6.439 C0.134,6.314 0.305,6.117 0.328,6.049 C0.390,5.855 0.178,5.235 0.132,5.045 C0.417,4.834 0.749,3.915 0.829,3.596 C0.801,3.605 0.774,3.614 0.746,3.624 C0.755,3.587 0.764,3.549 0.774,3.512 C0.937,3.317 1.179,3.356 1.359,3.206 C1.461,3.020 1.563,2.834 1.666,2.648 C1.733,2.569 1.697,2.616 1.805,2.620 C1.793,2.518 1.806,2.540 1.833,2.425 C1.898,2.434 1.963,2.444 2.028,2.453 C2.084,2.089 2.546,1.953 2.808,1.784 C3.423,1.389 4.021,1.074 4.815,0.864 C4.951,0.828 5.437,0.914 5.679,0.808 ZM11.561,8.334 C11.570,8.353 11.580,8.372 11.589,8.390 C11.580,8.372 11.570,8.353 11.561,8.334 ZM11.449,8.613 C11.468,8.613 11.487,8.613 11.505,8.613 C11.457,8.640 11.499,8.639 11.449,8.613 ZM4.927,18.481 C4.955,18.481 4.983,18.481 5.010,18.481 C5.010,18.490 5.010,18.499 5.010,18.509 C4.983,18.518 4.955,18.527 4.927,18.537 C4.927,18.518 4.927,18.499 4.927,18.481 ZM4.537,18.537 C6.367,18.663 7.962,19.114 8.272,20.962 C8.345,21.396 8.419,21.771 8.272,22.188 C8.083,22.723 7.530,22.758 7.296,23.192 C6.777,23.197 6.485,23.183 6.293,23.024 C6.265,23.034 6.237,23.043 6.209,23.052 C5.750,23.123 5.192,22.979 4.760,22.801 C3.642,22.343 3.081,21.406 2.753,20.098 C3.066,19.846 3.256,19.517 3.645,19.484 C3.612,19.319 3.553,19.316 3.477,19.206 C3.487,19.178 3.496,19.150 3.505,19.122 C3.626,19.124 3.666,19.126 3.756,19.038 C3.647,18.948 3.662,18.929 3.672,18.704 C3.682,18.704 3.691,18.704 3.700,18.704 C3.869,18.791 4.303,18.660 4.537,18.537 Z"/>
                </CustomControls:ShapeTextButton.Resources>
            </CustomControls:ShapeTextButton>

و جالبش اینجاست که هیچ کدوم از این مشکلات ، برای زمانی که همین کارها را برای آیکون "تنظیمات" (آیکون سمت راست در تصویر اولی) انجام میدادم ، این مشکلات وجود نداشت .
این مشکلات ، به نرم افزار فتوشاپ مربوط میشه یا به wpf یا از طرف من؟
کلا مشکلاتش از کجاست؟ و چرا توی قضیه ی آیکون "تنظیمات" ، این مشکلات نبود؟
تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد استاد .
استاد ، من یه شکلی (شکل و آیکون Help) را درون فتوشاپ ، به ابعاد 24 در 24 درمیارم (کنترلم در wpf هم با همین ابعاد هست) و کد Data ئه اون شکل را میگیرم .
اما در 2 جا مشکل ایجاد میشه :

اول اینکه درون فتوشاپ ، آیکون help ، در وسط هست اما وقتی کدش را به کنترل wpf منتقل میکنم ، در واقع TranslateTransform اش قاتی میکنه و در فتوشاپ که در وسط بود ، در کنترل wpf ، به سمت چپ بالا میره که مجبور میشم TranslateTransform ئه کنترل wpf را تغییر بدم تا درست بشه .
در صورتی که اولا هر دو width و height در فتوشاپ و کنترل wpf ، یکی هست (24 در 24) و دوما این کار را برای آیکون تنظیمات هم انجام دادم اما TranslateTransform اش در کنترل wpf بهم نریخت .

دوم اینکه قبل از اینکه درون فتوشاپ ، Resize Image کنم و ابعادش را به 24 در 24 تبدیل کنم (یعنی زمانی که ابعاد اصلی شو داره) ، اگه در این صورت کد دیتای آیکون Help را بگیرم و در کنترل wpf قرار بدم ، مشکلی نیست که من هم همین را میخوام (در این صورت ، در هر دوی هم فتوشاپ و هم کنترل wpf ، آیکونم به شکل زیر هست) :


مشاهده پیوست 113717


آیکون سمت چپ که شکل Help هست و باندش هم در تصویر مشخص هست (این زمانی هه که TranslateTransform کنترل را طبق توضیح بالا ، تغییر دادم) و کدش هم این طور میشه :


XML:
            <CustomControls:ShapeTextButton x:Name="HelpButton" DockPanel.Dock="Right" Margin="0,0,10,0" Width="24" Height="24"
                                            IsGet_ButtonShape_BrushFrom_ContentBrush="True"
                                            DefaultButtonShape="{DynamicResource HelpShape}" MouseEnterButtonShape="{DynamicResource HelpShape}" MouseDownButtonShape="{DynamicResource HelpShape}" ControlDisabledButtonShape="{DynamicResource HelpShape}">

                <CustomControls:ShapeTextButton.Resources>
                    <Path x:Key="HelpShape" Data="M199.000,0.000 C298.671,7.627 430.094,127.190 418.000,221.000 C416.492,232.698 422.356,250.832 416.000,262.000 C377.347,329.919 324.217,378.676 278.000,438.000 C267.738,451.172 269.761,468.486 264.000,487.000 C257.667,502.332 251.333,517.668 245.000,533.000 C243.667,544.332 242.333,555.668 241.000,567.000 C234.418,578.734 202.912,592.460 186.000,596.000 C153.433,602.816 120.495,517.100 133.000,479.000 C137.000,470.001 141.000,460.999 145.000,452.000 C144.333,446.334 143.667,440.666 143.000,435.000 C175.093,354.678 243.422,300.839 295.000,239.000 C309.292,221.865 346.286,165.624 332.000,135.000 C315.949,100.593 236.584,103.990 198.000,121.000 C122.599,154.241 107.262,219.379 80.000,300.000 C75.121,314.429 88.857,325.594 86.000,338.000 C85.000,337.667 84.000,337.333 83.000,337.000 C42.258,287.972 6.705,255.931 7.000,186.000 C4.667,174.668 2.333,163.332 0.000,152.000 C4.062,131.103 24.803,116.317 22.000,98.000 C56.674,75.381 70.600,42.817 112.000,23.000 C130.665,16.001 149.335,8.999 168.000,2.000 C178.332,1.333 188.668,0.667 199.000,0.000 ZM410.000,270.000 L410.000,270.000 ZM406.000,280.000 L406.000,280.000 ZM172.000,634.000 C173.000,634.333 174.000,634.667 175.000,635.000 C174.000,634.667 173.000,634.333 172.000,634.000 ZM158.000,636.000 C215.203,640.533 268.785,654.658 289.000,701.000 C290.333,712.666 291.667,724.334 293.000,736.000 C298.301,753.704 291.275,775.786 280.000,786.000 C241.457,820.917 147.159,795.087 120.000,756.000 C113.258,746.296 101.111,699.348 94.000,696.000 C96.714,684.462 114.710,668.536 125.000,671.000 C125.353,664.800 123.395,664.580 120.000,660.000 C120.333,659.000 120.667,658.000 121.000,657.000 C124.000,656.000 127.000,655.000 130.000,654.000 C126.289,650.351 126.751,650.412 127.000,642.000 C135.096,644.625 147.962,640.556 158.000,636.000 Z" RenderTransformOrigin="0.5,0.5">
                        <Path.RenderTransform>
                            <TransformGroup>
                                <TranslateTransform X="6.2" Y="0.7"/>
                            </TransformGroup>
                        </Path.RenderTransform>
                        <Path.LayoutTransform>
                            <TransformGroup>
                                <ScaleTransform ScaleY="0.028" ScaleX="0.028"/>
                            </TransformGroup>
                        </Path.LayoutTransform>
                    </Path>
                </CustomControls:ShapeTextButton.Resources>
            </CustomControls:ShapeTextButton>


اما اگه در فتوشاپ ، ابعاد را به 24 در 24 تبدیل کنم و بعد دیتای آیکون را بگیرم ، در این صورت ، در فتوشاپ ، علی الظاهر هیچ مشکلی نیست و شکل Help ، همون مثل شکل بالا هست اما در کنترل wpf که کد دیتای شکل را قرار میدم ، هر بار ، یه خط و خطوط عجیب و غریب بهش اضافه میشه . یه نمونه اش ، شکل زیر که خطی شبیه به فِلِش بهش اضافه شد :


مشاهده پیوست 113718


شکلی شبیه فِلِش یا یه خط که در تصویر بالا اضافه شده (در وسط) (نسبت به شکل قبل) ، مشهوده .
و جالب تر اینکه هر بار که در فتوشاپ ، مجددا Make Work Path را میزنم و مجددا Resize Image میکنم ، یه خط جدید در یه جای دیگه ی تصویر ممکنه (فقط در کنترل wpf نه اینکه در فتوشاپ) اضافه بشه .
کدش هم اینه :

XML:
            <CustomControls:ShapeTextButton x:Name="HelpButton" DockPanel.Dock="Right" Margin="0,0,10,0" Width="24" Height="24"
                                            IsGet_ButtonShape_BrushFrom_ContentBrush="True"
                                            DefaultButtonShape="{DynamicResource HelpShape}" MouseEnterButtonShape="{DynamicResource HelpShape}" MouseDownButtonShape="{DynamicResource HelpShape}" ControlDisabledButtonShape="{DynamicResource HelpShape}">

                <CustomControls:ShapeTextButton.Resources>
                    <Path x:Key="HelpShape" Data="M5.679,0.808 C6.110,0.841 6.657,0.836 7.101,1.003 C8.153,1.400 10.554,3.460 11.115,4.376 C11.292,4.665 11.341,5.052 11.449,5.268 C11.505,5.305 11.561,5.343 11.617,5.380 C11.775,5.709 11.986,7.674 11.728,8.111 C11.635,8.177 11.542,8.242 11.449,8.307 C11.331,8.484 10.934,9.242 11.003,9.338 C10.723,9.677 10.124,10.630 9.777,10.815 C9.667,10.874 9.605,10.829 9.526,10.899 C9.558,11.004 9.586,10.928 9.526,11.010 C8.975,11.522 7.877,12.819 7.603,13.547 C7.566,13.826 7.528,14.105 7.491,14.383 C7.328,14.875 7.143,15.153 6.962,15.666 C6.861,15.950 6.920,16.511 6.767,16.613 C6.649,16.852 5.350,17.627 4.983,17.366 C4.391,17.141 3.571,15.487 3.784,14.551 C3.853,14.246 4.210,13.528 4.174,13.296 C4.060,12.566 4.749,12.014 5.066,11.456 C5.159,11.224 5.252,10.992 5.345,10.760 C5.610,10.351 6.011,10.066 6.348,9.728 C7.253,8.823 8.019,7.896 8.690,6.746 C9.009,6.199 9.485,5.899 9.415,5.129 C9.405,4.943 9.396,4.757 9.387,4.571 C8.967,3.684 6.702,3.714 5.652,4.181 C4.588,4.654 3.545,5.739 3.059,6.801 C2.838,7.286 2.922,7.826 2.753,8.390 C2.495,9.245 2.252,9.081 2.585,10.091 C2.567,10.137 2.548,10.184 2.530,10.230 C1.628,9.726 0.392,7.540 0.160,6.439 C0.134,6.314 0.305,6.117 0.328,6.049 C0.390,5.855 0.178,5.235 0.132,5.045 C0.417,4.834 0.749,3.915 0.829,3.596 C0.801,3.605 0.774,3.614 0.746,3.624 C0.755,3.587 0.764,3.549 0.774,3.512 C0.937,3.317 1.179,3.356 1.359,3.206 C1.461,3.020 1.563,2.834 1.666,2.648 C1.733,2.569 1.697,2.616 1.805,2.620 C1.793,2.518 1.806,2.540 1.833,2.425 C1.898,2.434 1.963,2.444 2.028,2.453 C2.084,2.089 2.546,1.953 2.808,1.784 C3.423,1.389 4.021,1.074 4.815,0.864 C4.951,0.828 5.437,0.914 5.679,0.808 ZM11.561,8.334 C11.570,8.353 11.580,8.372 11.589,8.390 C11.580,8.372 11.570,8.353 11.561,8.334 ZM11.449,8.613 C11.468,8.613 11.487,8.613 11.505,8.613 C11.457,8.640 11.499,8.639 11.449,8.613 ZM4.927,18.481 C4.955,18.481 4.983,18.481 5.010,18.481 C5.010,18.490 5.010,18.499 5.010,18.509 C4.983,18.518 4.955,18.527 4.927,18.537 C4.927,18.518 4.927,18.499 4.927,18.481 ZM4.537,18.537 C6.367,18.663 7.962,19.114 8.272,20.962 C8.345,21.396 8.419,21.771 8.272,22.188 C8.083,22.723 7.530,22.758 7.296,23.192 C6.777,23.197 6.485,23.183 6.293,23.024 C6.265,23.034 6.237,23.043 6.209,23.052 C5.750,23.123 5.192,22.979 4.760,22.801 C3.642,22.343 3.081,21.406 2.753,20.098 C3.066,19.846 3.256,19.517 3.645,19.484 C3.612,19.319 3.553,19.316 3.477,19.206 C3.487,19.178 3.496,19.150 3.505,19.122 C3.626,19.124 3.666,19.126 3.756,19.038 C3.647,18.948 3.662,18.929 3.672,18.704 C3.682,18.704 3.691,18.704 3.700,18.704 C3.869,18.791 4.303,18.660 4.537,18.537 Z"/>
                </CustomControls:ShapeTextButton.Resources>
            </CustomControls:ShapeTextButton>

و جالبش اینجاست که هیچ کدوم از این مشکلات ، برای زمانی که همین کارها را برای آیکون "تنظیمات" (آیکون سمت راست در تصویر اولی) انجام میدادم ، این مشکلات وجود نداشت .
این مشکلات ، به نرم افزار فتوشاپ مربوط میشه یا به wpf یا از طرف من؟
کلا مشکلاتش از کجاست؟ و چرا توی قضیه ی آیکون "تنظیمات" ، این مشکلات نبود؟
تشکر استاد .
اولا فتوشاپ هیچوقت نرم افزار مناسبی برای طراحی یا خروجی دادن Vector نبوده و نیست و نخواهد بود. ثانیا تبدیل بردار به تصویر و تبدیل مجدد تصویر به بردار باعث اضافه شدن نویز به بردار یا از دست رفتن جزئیات میشه. اگر قراره بردار بردار بمونه نباید دیگه در فتوشاپ rasterize بشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اولا فتوشاپ هیچوقت نرم افزار مناسبی برای طراحی یا خروجی دادن Vector نبوده و نیست و نخواهد بود. ثانیا تبدیل بردار به تصویر و تبدیل مجدد تصویر به بردار باعث اضافه شدن نویز به بردار یا از دست رفتن جزئیات میشه. اگر قراره بردار بردار بمونه نباید دیگه در فتوشاپ rasterize بشه.

خیلی ممنون استاد .
اول یه فایل png دارم که طراحی آیکون ها توش هست . یه کم اندازه و اینهاش را تغییر میدم (و کلا کارهایی که مد نظرم هست را روش انجام میدم) و بعد به vector تبدیلش میکنم (توسط گزینه ی make path work) . در واقع ، فقط یه مرحله تبدیل تصویر به بردار میشه . دو مرحله ای نیست .

الان مشکل از فتوشاپه؟ یعنی ممکنه که در زمان تبدیل png به path ، مشکل بوجود اومده باشه؟ ولی path هایی که دور شی و تصویر مورد نظرم کشیده بود ، کاملا درست بود (همون نقاطی هستن که با پُر کردنش ، تصویر Help در پست 531 در تصویر اول که آپلود کردم را ارائه داد) .
اگه قرار بود مشکل داشته باشه ، پس چرا این قابلیت را در فتوشاپ تعبیه کردن؟

چه نرم افزاری را پیشنهاد میدین؟
ایلاستریتور را پیشنهاد میدین؟ (فقط میخوام شکل و آیکونی که در فایل png هست را به بردار تبدیل کنم و بعد هم اندازه اش را به 24 در 24 تغییر بدم تا از لحاظ ابعاد ، با کنترل wpf ام یک اندازه بشه تا در wpf لازم نباشه که Transform ئه کنترل را تغییر بدم) .
تشکر استاد
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
اول یه فایل png دارم که طراحی آیکون ها توش هست . یه کم اندازه و اینهاش را تغییر میدم (و کلا کارهایی که مد نظرم هست را روش انجام میدم) و بعد به vector تبدیلش میکنم (توسط گزینه ی make path work) . در واقع ، فقط یه مرحله تبدیل تصویر به بردار میشه . دو مرحله ای نیست .
اینجور آیکون ها بر اساس وکتور طراحی شدن، از اساس برداری بودن. سایت های جستجوی آیکون رو ببینید، پر از آیکون های وکتوری اند که فرمت Png شون هم موجود ئه ولی png نتیجه تبدیل ئه، نه منبع اصلی.

الان مشکل از فتوشاپه؟ یعنی ممکنه که در زمان تبدیل png به path ، مشکل بوجود اومده باشه؟ ولی path هایی که دور شی و تصویر مورد نظرم کشیده بود ، کاملا درست بود (همون نقاطی هستن که با پُر کردنش ، تصویر Help در پست 531 در تصویر اول که آپلود کردم را ارائه داد) .
اگه قرار بود مشکل داشته باشه ، پس چرا این قابلیت را در فتوشاپ تعبیه کردن؟
مشکل از فتوشاپ نیست. شما یک تصویر بهش می دهید میگید فتوشاپ Trace اش کنه تا بردار بشه. اونم بردارش می کنه، با همون الگوریتمی که داره. اینکه نتیجه اش مطلوب شما نیست که مشکل نرم افزار نیست. فتوشاپ نه نرم افزار تخصصی کار با بردار ئه و نه برای Trace کردن تنظیمات زیادی داره و نه برای کسی که با فتوشاپ کار می کنه تنظیمات زیادی برای Trace بردار لازمه. من هم طراح فتوشاپ نیستم که بخوام بگم چرا فلان قابلیت رو داخلش تعبیه کردن.

چه نرم افزاری را پیشنهاد میدین؟
ایلاستریتور را پیشنهاد میدین؟ (فقط میخوام شکل و آیکونی که در فایل png هست را به بردار تبدیل کنم و بعد هم اندازه اش را به 24 در 24 تغییر بدم تا از لحاظ ابعاد ، با کنترل wpf ام یک اندازه بشه تا در wpf لازم نباشه که Transform ئه کنترل را تغییر بدم) .
ایلاستریتور قطعا بهتر از فتوشاپ ئه اما کلا برای تبدیل تصویر آیکون به وکتور هیچ نرم افزاری رو پیشنهاد نمی کنم، از اساس Trace کردن کار خیلی با حفظ جزئیاتی نیست. پیشنهاد من اینه که یا خودتون از نو آیکون رو بصورت برداری طراحی کنید یا دنبال نمونه وکتوری مشابهش بگردید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اینجور آیکون ها بر اساس وکتور طراحی شدن، از اساس برداری بودن. سایت های جستجوی آیکون رو ببینید، پر از آیکون های وکتوری اند که فرمت Png شون هم موجود ئه ولی png نتیجه تبدیل ئه، نه منبع اصلی.

استاد ، الان مثلا یه فایل svg را گرفتم (فایل در لینک زیر) :


بعد که در کنترل wpf بکار بردم ، مثل فتوشاپ ، یه کم انگار نسبت هاش تغییر میکنه (باید توجه خوبی کنیم تا متوجه بشیم) . مثلا اینکه در اون آیکون ، قطر دایره ای که در وسط قرار داره بیشتر از زمانی هه که وقتی دیتاش را در کنترل wpf میذاریم .

مشکل از فتوشاپ نیست. شما یک تصویر بهش می دهید میگید فتوشاپ Trace اش کنه تا بردار بشه. اونم بردارش می کنه، با همون الگوریتمی که داره. اینکه نتیجه اش مطلوب شما نیست که مشکل نرم افزار نیست. فتوشاپ نه نرم افزار تخصصی کار با بردار ئه و نه برای Trace کردن تنظیمات زیادی داره و نه برای کسی که با فتوشاپ کار می کنه تنظیمات زیادی برای Trace بردار لازمه. من هم طراح فتوشاپ نیستم که بخوام بگم چرا فلان قابلیت رو داخلش تعبیه کردن.


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

با ایلاستریتور اندکی کار کردم و آموزش Image Trace اش را گرفتم . اما Image Trace ، اون چیزی نیست که مد نظرمه . کلا ماهیت اش با چیزی که من میخوام فرق داره . حالا شاید من بلد نیستم و شاید هم ابزارهای دیگه ای باشه که ندونم . اما اون گزینه ی make work path در فتوشاپ ، همون چیزی هه که مد نظرمه .
با همین گزینه در فتوشاپ راحت ترم . حالا در wpf اون path را TransformTranslate میکنم تا درست شه .
تشکر استاد .
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد ، میگم رویداد UIElement.MouseDown چرا وقتی کلیک میکنیم ، کار نمیکنه اما رویداد UIElement.PreviewMouseDown کار میکنه؟
به استراتژی حباب و اینها ربط داشت . درسته؟
اندکی یادم رفت :green:

البته ناراحت میشین جواب ندین . بذارین سر فرصت من اون مباحث استراتژی حباب و اینها را مرور کنم بعد .
ببخشید ، تشکر :rose:
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد ، میگم رویداد UIElement.MouseDown چرا وقتی کلیک میکنیم ، کار نمیکنه اما رویداد UIElement.PreviewMouseDown کار میکنه؟
به استراتژی حباب و اینها ربط داشت . درسته؟
اندکی یادم رفت :green:

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

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
خیلی ممنون استاد .

استاد ، پروپرتی Text ئه ComboBox مربوط به WinForm را در نظر بگیرید (اینکه میتونیم یه متنی بنویسیم که توی لیست آیتم ها نباشه اما تا زمانی که کاربر ، آیتمی از کمبوباکس را انتخاب نکرد ، اون متن نمایش داده میشه) .

حالا توی WPF ، هر چند پروپرتی Text ئه ComboBox اش هم همین کار را میکنه ، منتها فقط زمانی این کار را میکنه که پروپرتیِ IsEditable ئه ComboBox اش هم همون لحظه مقدار true داشته باشه .
حالا آیا روشی هست که وقتی پروپرتیِ IsEditable ئه ComboBox مقدارش false هه ، باز هم این قضیه ی پروپرتیِ Text کار کنه؟
یا راه حل دیگه ای کلا برای این کار هست؟
تشکر استاد :rose:
 

the_king

مدیرکل انجمن
سلامی مجدد
خیلی ممنون استاد .

استاد ، پروپرتی Text ئه ComboBox مربوط به WinForm را در نظر بگیرید (اینکه میتونیم یه متنی بنویسیم که توی لیست آیتم ها نباشه اما تا زمانی که کاربر ، آیتمی از کمبوباکس را انتخاب نکرد ، اون متن نمایش داده میشه) .

حالا توی WPF ، هر چند پروپرتی Text ئه ComboBox اش هم همین کار را میکنه ، منتها فقط زمانی این کار را میکنه که پروپرتیِ IsEditable ئه ComboBox اش هم همون لحظه مقدار true داشته باشه .
حالا آیا روشی هست که وقتی پروپرتیِ IsEditable ئه ComboBox مقدارش false هه ، باز هم این قضیه ی پروپرتیِ Text کار کنه؟
یا راه حل دیگه ای کلا برای این کار هست؟
تشکر استاد :rose:
باید کارکرد ComboBox.Text رو در وراثت تغییر بدهید، وگرنه هر مشخصه کاری رو می کنه که در کد کلاسش مشخص شده.
مثلا این بخشی از کد کلاس ComboBox ئه، بر اساس اینکه IsEditable باشه یا نباشه دو روال کاملا متفاوت داره :
C#:
        private void Update()
        {
            if (this.IsEditable)
            {
                this.UpdateEditableTextBox();
                return;
            }
            this.UpdateSelectionBoxItem();
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
باید کارکرد ComboBox.Text رو در وراثت تغییر بدهید، وگرنه هر مشخصه کاری رو می کنه که در کد کلاسش مشخص شده.
مثلا این بخشی از کد کلاس ComboBox ئه، بر اساس اینکه IsEditable باشه یا نباشه دو روال کاملا متفاوت داره :
C#:
        private void Update()
        {
            if (this.IsEditable)
            {
                this.UpdateEditableTextBox();
                return;
            }
            this.UpdateSelectionBoxItem();
        }

خیلی ممنون استاد .
راه دیگه ای نیست؟
چون واسه ی این کار کوچیک ، کلا یه کلاس جدید درست نکنم را میگم .
 

جدیدترین ارسال ها

بالا