Насколько я понял, это происходит потому, что RotateTransform не является FrameworkElement. Обойти это можно использованием присоединённого свойства: ( http://www.sharpgis.net/?tag=/silverlight )
| Код | public class Arrow : Control { static Arrow() { DefaultStyleKeyProperty.OverrideMetadata(typeof(Arrow), new FrameworkPropertyMetadata(typeof(Arrow))); }
public double Angle { get { return (double)GetValue(AngleProperty); } set { SetValue(AngleProperty, value); } }
public static readonly DependencyProperty AngleProperty = DependencyProperty.Register("Angle", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0) { AffectsRender = true });
public static readonly DependencyProperty AttachedAngleProperty = DependencyProperty.RegisterAttached("AttachedAngle", typeof(double), typeof(Arrow), new FrameworkPropertyMetadata(0.0) {PropertyChangedCallback = OnAngleChanged});
public static double GetAttachedAngle(DependencyObject d) { return (double)d.GetAttachedValue(AttachedAngleProperty); }
public static void SetAttachedAngle(DependencyObject d, double value) { d.SetValue(AttachedAngleProperty, value); }
private static void OnAngleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is UIElement) { UIElement b = d as UIElement; if (e.NewValue is double) { double c = (int)e.NewValue; if (!double.IsNaN(c)) { if (b.RenderTransform is RotateTransform) (b.RenderTransform as RotateTransform).Angle = c; else b.RenderTransform = new RotateTransform() { Angle = c }; } } } } }
|
| Код | <Style TargetType="{x:Type local:Arrow}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:Arrow}"> <Path Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" Stretch="Fill" Data="M0 0M20 20M9 10 L10 2 L 11 10A1 1 0 1 1 9 10" local:Arrow.AttachedAngle="{TemplateBinding Angle}"/> </ControlTemplate> </Setter.Value> </Setter> </Style>
|
|