XAML :
<Grid x:Name="LayoutRoot" Background="#FF69CFC5">
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Image Stretch="Fill" x:Name="image1" Width="300" Height="300" Source="/Assets/fan.jpg" Margin="10,0,-10,176"/>
<Button Click="Button_Click" Content="Button" HorizontalAlignment="Left" Margin="178,538,0,0" VerticalAlignment="Top"/>
</Grid>
</Grid>
C#:
int trX = 0;
int trY = 0;
TextBlock croppingRectangle;
public MainPage()
{
InitializeComponent();
//init();
}
public void init()
{
TextBlock rect = new TextBlock();
rect.Text = "Hello......Hello......";
rect.Height = 94; //fixed
rect.MaxHeight = image1.Height;
rect.MaxWidth = image1.Width;
rect.Width = 300; //fixed
rect.TextWrapping = TextWrapping.Wrap;
rect.Foreground = new SolidColorBrush(Colors.Black);
rect.FontSize = 70;
rect.FontWeight = FontWeights.Bold;
rect.Margin = image1.Margin;
rect.ManipulationDelta += new EventHandler<ManipulationDeltaEventArgs>(rect_ManipulationDelta);
LayoutRoot.Children.Add(rect);
LayoutRoot.Height = image1.Height;
LayoutRoot.Width = image1.Width;
}
private void rect_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
GeneralTransform gt = ((TextBlock)sender).TransformToVisual(LayoutRoot);
Point p = gt.Transform(new Point(0, 0));
int intermediateValueY = (int)((LayoutRoot.Height - ((TextBlock)sender).Height));
int intermediateValueX = (int)((LayoutRoot.Width - ((TextBlock)sender).Width));
croppingRectangle = (TextBlock)sender;
TranslateTransform tr = new TranslateTransform();
trX += (int)e.DeltaManipulation.Translation.X;
trY += (int)e.DeltaManipulation.Translation.Y;
if (trY < (-intermediateValueY / 2))
{
trY = (-intermediateValueY / 2);
}
else if (trY > (intermediateValueY / 2))
{
trY = (intermediateValueY / 2);
}
if (trX < (-intermediateValueX / 2))
{
trX = (-intermediateValueX / 2);
}
else if (trX > (intermediateValueX / 2))
{
trX = (intermediateValueX / 2);
}
tr.X = trX;
tr.Y = trY;
croppingRectangle.RenderTransform = tr;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
init();
}
}