نظرة عامة على التحويلات
يصف هذا الموضوع كيفية استخدام 2-DTransform فصول للتدوير ، الحجم ، ونقل (ترجمة) وتحرف كائناتFrameworkElement.
يشتمل هذا الموضوع على الأقسام التالية.
- ما هي محتويات التحويل
- تحويل الفئات
- الخصائص المشتركة للتحول
- التحولات وتنسيق النظم
- تحويل عنصر الإطار
- مثال: تدوير 45 عنصرا إطار الدرجات
- تحويلات الحركة.
- ميزات القابل للتجميد
- موضوعات ذات صلة
ما هي محتويات التحويل
Transform يحدد كيفية الخريطة ، أو التحويل ، واحدة من نقاط تنسيق الفضاء إلى آخر تنسيق الفضاء. يتم وصف هذا التعيين بواسطة تحويل Matrix ، وهو مجموعة من ثلاثة صفوف مع ثلاثة أعمدة من Double القيم.
ملاحظة |
---|
Windows Presentation Foundation (WPF)تستخدم المصفوفات الرئيسية بالصف.كما يتم التعبير عن المتجهات المتجهات في الصف ، وليس ناقلات العمود. |
يوضح الجدول التالي بنيه WPFرمز المصفوفة.
وتحول اتجاهين المصفوفة
الافتراضية: 1.0 |
الافتراضية: 0.0 |
0.0 |
الافتراضية: 0.0 |
الافتراضية: 1.0 |
0.0 |
الافتراضية: 0.0 |
الافتراضية: 0.0 |
1.0 |
عن طريق التلاعب فى مصفوفة القيم ، يمكنك تدوير ، الحجم ، والانحراف ، والانتقال (ترجمة) كائن. على سبيل المثال، إذا قمت بتغيير القيمة في العمود الأول من الصف الثالث ( OffsetX قيمة) صواب 100، يمكنك استخدام لنقل كائن 100 وحدة على طول المحور س. إذا قمت بتغيير القيمة في العمود الثاني من الصف الثاني إلى 3 ، يمكنك استخدامها لكائن تمتد إلى ثلاثة أضعاف ارتفاعها الحالي. إذا قمت بتغيير كلاهما قيم، قم بنقل وحدات الكائن 100 بطول المحور س وتمدد لها الارتفاع بعامل 3. لأن Windows Presentation Foundation (WPF)فقط التحويلات affine اعتماد، والقيم الموجودة في العمود الأيسر دائماً 0، 0، 1.
على الرغم من أن Windows Presentation Foundation (WPF) تمكنك من التعامل مع مصفوفة القيم مباشرة ، كما يوفر العديد من Transform الفئات التي تمكنك لتحويل كائن دون ان تعرف كيف تم تكوين البنية الأساسية المصفوفة. على سبيل المثال، ScaleTransform فئة تمكنك من نطاق كائن من خلال تحديد ScaleX و ScaleY خصائص بدلا من التلاعب و تحول المصفوفة. كذلك، RotateTransform فئة تمكنك من تدوير كائن الإعداد لها فقط Angle الممتلكات.
تحويل الفئات
يوفر Windows Presentation Foundation (WPF) فئات 2-DTransform لعمليات التحويل الشائعة:
الفئة |
الوصف |
المثال |
توضيح |
---|---|---|---|
استدارة عنصر من المحدد Angle. |
|||
لإنشاء تحويلات أكثر تعقيداً Windows Presentation Foundation (WPF) ينص على ما يلي فئتين
الفئة |
الوصف |
المثال |
---|---|---|
مجموعات متعددة TransformGroup الكائنات إلى واحدة متعددة Transform التي يمكنك تطبيقها ثم تحويل الممتلكات. |
||
يقوم بإنشاء تحويلات المخصصة التي لم يتم توفيرها من قبل الآخرين Transform الفئات. عند استخدام MatrixTransform ، تقوم بمعالجة مصفوفة مباشرة. |
كيفية القيام بما يلي: استخدام MatrixTransform لإنشاء تحويلات مخصصة |
Windows Presentation Foundation (WPF) يوفر أيضاً3-D تحويلات. لمزيد من المعلومات، راجع فئة Transform3D.
الخصائص المشتركة للتحول
طريقة واحدة لتحويل كائن هو أن تعلن المناسبة Transform نوع وتطبيقه على خاصية تحويل الكائن. أنواع مختلفة من الكائنات وأنواع مختلفة من خصائص التحول. يسرد الجدول التالي استخدامات عدة Windows Presentation Foundation (WPF)و أنواعها وخصائص تحولها.
Type |
خصائص التحويل |
---|---|
التحولات وتنسيق النظم
عند تحويل كائن ما ، لا مجرد تحويل الكائن ، يمكنك تحويل تنسيق الفضاء الذي يوجد به هذا الكائن. افتراضيا ، يتم تحويل المركز في الأصل من الهدف الكائن لتنسيق النظام : (0,0). الاستثناء الوحيد هو TranslateTransform; TranslateTransform لا يوجد لديه خصائص لتعيين مركز لأثر الترجمة هو نفسه بغض النظر عن المكان الذي يتركز عليه.
يستخدم المثال التالي RotateTransform لتدوير Rectangle العنصر وهو نوع من FrameworkElement ، بزاوية 45 درجة حول مركزه الافتراضي (0، 0). يبين الرسم التوضيحي التالي تأثير الاستدارة.
وثمة عنصر مستطيل استدارة 45 درجة عن النقطة (0،0)
<Canvas Width="200" Height="200">
<Rectangle
Canvas.Left="100" Canvas.Top="100"
Width="50" Height="50"
Fill="RoyalBlue" Opacity="1.0">
<Rectangle.RenderTransform>
<RotateTransform Angle="45" />
</Rectangle.RenderTransform>
</Rectangle>
</Canvas>
بشكل افتراضي، استدارة العنصر حول الزاوية العلوية اليمنى (0، 0). RotateTransform ، ScaleTransform ، و SkewTransform توفر فئات الخصائص CenterX CenterY التي تمكنك من تحديد نقطة تطبيق التحويل.
يستخدم المثال التالي أيضاً RotateTransform لاستدارة Rectangle عنصر بزاوية 45 درجة; ومع ذلك، هذا الوقت CenterX و CenterY تعيين خصائص بحيث RotateTransform يحتوي على وسط (25 ، 25). يبين الرسم التوضيحي التالي تأثير الاستدارة.
وثمة عنصر مستطيل استدارة 45 درجة عن النقطة (0،0)
<Canvas Width="200" Height="200">
<Rectangle
Canvas.Left="100" Canvas.Top="100"
Width="50" Height="50"
Fill="RoyalBlue" Opacity="1.0">
<Rectangle.RenderTransform>
<RotateTransform Angle="45" CenterX="25" CenterY="25" />
</Rectangle.RenderTransform>
</Rectangle>
</Canvas>
تحويل عنصر الإطار
لتطبيق التحولات إلى FrameworkElement ، إنشاء Transform وتطبيقه على واحدة من خصائص اثنين أن FrameworkElement توفر الفئة:
LayoutTransform – تحويل التي يتم تطبيقها قبل مرور التخطيط. بعد التحويل يتم تطبيقها ، ونظام تخطيط عمليات تحويل حجم وموضع العنصر.
RenderTransform – تحويل تعديل مظهر العنصر ولكن يتم تطبيقه بعد اكتمال مسار تخطيط. باستخدام RenderTransform بدلاً من LayoutTransform يمكنك الحصول على فوائد ألاداء.
أي منهما ينبغي عليك استخدامه؟ وبسبب مزايا الأداء التي توفرها استخدام RenderTransform كلما أمكن خاصة عند استخدام متحرك Transform الكائنات. استخدام LayoutTransform الخاصيه عند تحجيم تدوير, أو جانبيه و التي تحتاج الأصل للتكيف مع حجم تحول عنصر. لاحظ أنه عندما يتم استخدامها مع LayoutTransform الخاصية TranslateTransform تظهر الكائنات لجعل أي تأثير على عناصر. وذلك لأن نظام تخطيط إرجاع عنصر ترجم إلى موضعه الأصلي كجزء من المعالجة لها.
للحصول على معلومات إضافية حول التخطيط في Windows Presentation Foundation (WPF) راجع تخطيط النظام نظرة عامة حول.
مثال: تدوير 45 عنصرا إطار الدرجات
يستخدم المثال التالي RotateTransform لتدوير في اتجاه عقارب الساعة زر بنسبة 45 درجة. يحتوي الزر في StackPanel له اثنين من الأزرار الأخرى
افتراضياً، RotateTransform يدور حول النقطة (0، 0). لأن المثال لا يحدد مركز، يدور الزر حول النقطة (0, 0) التي هي الزاوية العلوية اليسرى. يتم تطبيق RotateTransform إلى الخاصية RenderTransform. يبين الرسم التوضيحي التالي نتيجة التحويل لها.
استدارة باتجاه عقارب الساعة 45 درجة ناحيه الزاوية العلوية اليمنى
<Border Margin="30"
HorizontalAlignment="Left" VerticalAlignment="Top"
BorderBrush="Black" BorderThickness="1" >
<StackPanel Orientation="Vertical">
<Button Content="A Button" Opacity="1" />
<Button Content="Rotated Button">
<Button.RenderTransform>
<RotateTransform Angle="45" />
</Button.RenderTransform>
</Button>
<Button Content="A Button" Opacity="1" />
</StackPanel>
</Border>
يستخدم المثال التالي أيضاً RotateTransform لتدوير زر 45 درجة باتجاه عقارب الساعة ولكنه أيضًا بتعيين RenderTransformOrigin من زر إلى (0.5 ، 0.5). القيمة RenderTransformOrigin خاصيه هو نسبة إلى حجم الزر. ونتيجة لذلك، يتم تطبيق الاستدارة إلى مركز الزر بدلاً من الركن الأيسر العلوي. يبين الرسم التوضيحي التالي نتيجة التحويل لها.
استدارة باتجاه عقارب الساعة 45 درجة حول الوسط
<Border Margin="30"
HorizontalAlignment="Left" VerticalAlignment="Top"
BorderBrush="Black" BorderThickness="1">
<StackPanel Orientation="Vertical">
<Button Content="A Button" Opacity="1" />
<Button Content="Rotated Button"
RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<RotateTransform Angle="45" />
</Button.RenderTransform>
</Button>
<Button Content="A Button" Opacity="1" />
</StackPanel>
</Border>
يستخدم المثال التالي LayoutTransform خاصيه بدلاً من RenderTransform خاصيه لتدوير الزر. يؤدي هذا التحويل يؤثر على التخطيط الزر ، الذي يُشغل مسار كامل بواسطة نظام تخطيط. نتيجة لذلك، زر استدارة ومن ثم إعادة تحديد موضعها بسبب تغيير حجمه. يبين الرسم التوضيحي التالي نتيجة التحويل لها.
تخطيط استخدام تحويل لتدوير زر.
<Border Margin="30"
HorizontalAlignment="Left" VerticalAlignment="Top"
BorderBrush="Black" BorderThickness="1">
<StackPanel Orientation="Vertical">
<Button Content="A Button" Opacity="1" />
<Button Content="Rotated Button">
<Button.LayoutTransform>
<RotateTransform Angle="45" />
</Button.LayoutTransform>
</Button>
<Button Content="A Button" Opacity="1" />
</StackPanel>
</Border>
تحويلات الحركة.
بسبب أن ترث من Animatable فئة Transform متحرك الفئات. لتحريك Transform ، يتم تطبيق رسوم نوع متوافق الخاصيه التي تريد تحريكها.
يستخدم المثال التالي على Storyboard و DoubleAnimation مع RotateTransform لجعل Button زيادة ونقصان في مكان عندما يتم النقر فوق.
<Page
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="Button Animated RotateTransform Example"
Background="White" Margin="50">
<StackPanel>
<Button Content="A Button"
RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="AnimatedRotateTransform"
Storyboard.TargetProperty="Angle"
To="360" Duration="0:0:1" FillBehavior="Stop" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</StackPanel>
</Page>
للحصول على النموذج كامل، راجع نموذج2D Transforms. لمزيد من المعلومات حول الحركات، راجع نظرة عامة حول الحركة:
ميزات القابل للتجميد
بسبب أنه يرث من فئة Freezable ، فإن Transform توفر العديد من الميزات الخاصة: يمكن تعريف كائنات Transform كـ موارد ، تم مشاركتها بين عدة كائنات ، تم إجراءها للقراءة فقط لتحسين الأداء ، تم استنساخها وتم اجراءها كمؤشر الترابط - الآمن. للحصول على مزيد من المعلومات حول الميزات المختلفة المتوفرة من قبل كائنات Freezable ، راجع نظرة عامة حول الكائنات المجمدة.