(1) Behavior is a gneric type <>, non-generic one has no public ctor
(2) Need System.Interactivity.Dll from Blend SDK or MVVM light donwload
<Window x:Class="TestCustomBehavior.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:local="clr-namespace:TestCustomBehavior"
>
<Grid>
<TextBlock Background="LightBlue" Height="23" HorizontalAlignment="Left" Margin="134,140,0,0" Name="textBlock1" Text="Drag Me Around" VerticalAlignment="Top" >
<i:Interaction.Behaviors>
<local:DragBehavior></local:DragBehavior>
</i:Interaction.Behaviors>
</TextBlock>
</Grid>
</Window>
namespace TestCustomBehavior
{
public class DragBehavior : Behavior<UIElement>
{
Point startPosMouse, startPosElement; int i = 0;
TranslateTransform trans = new TranslateTransform();
protected override void OnAttached()
{
Window parent = Application.Current.MainWindow;
AssociatedObject.RenderTransform = trans;
AssociatedObject.MouseLeftButtonDown += (sender, e) =>
{
if (i == 0)
{
startPosElement = AssociatedObject.TranslatePoint(new Point(), parent); i = 1;
}
startPosMouse = e.GetPosition(parent);
AssociatedObject.CaptureMouse();
};
AssociatedObject.MouseLeftButtonUp += (sender, e) =>
{
AssociatedObject.ReleaseMouseCapture();
};
AssociatedObject.MouseMove += (sender, e) =>
{
Vector diff = e.GetPosition(parent) - startPosElement;
if (AssociatedObject.IsMouseCaptured)
{
trans.X= diff.X;
trans.Y = diff.Y;
}
};
}
}
}
Monday, January 30, 2012
WPF Custom Behavior
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment