could not detect right click mouse down and up events - c#
I have written a WPF software VS 2019 in Windows 7.
I want to achieve this function: when I right click a mouse down and draw a line in the canvas, a line will be drawn, starting at the point when I right click down a mouse and ending when I release the right click.
I have tried many method, but seems that the program could not detect the right click events.
<UserControl x:Class="STIGenericReport.UserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="407" Width="633" Background="White" BorderBrush="White" Focusable="False">
<Grid Name="maingrid" Background="White" Height="405" Width="616" MinWidth="500">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="619*" />
<ColumnDefinition Width="10*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height ="574*" />
<RowDefinition Height="26" MinHeight="16" />
</Grid.RowDefinitions>
<Viewport3D Name="mainViewport" ClipToBounds = "False"
IsHitTestVisible="false"
RenderOptions.EdgeMode="Aliased" Margin="12,52,144,47">
<Viewport3D.Camera>
<OrthographicCamera x:Name="camera" Width="2"
FarPlaneDistance="10"
NearPlaneDistance="1"
LookDirection="0,0,-1"
UpDirection="0,1,0"
Position="0,0,2" />
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3D x:Name="Light1">
<ModelVisual3D.Content>
<DirectionalLight Color="White" Direction="1, 1, -1" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="Light2">
<ModelVisual3D.Content>
<DirectionalLight Color="White" Direction="-1, 1, -1" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D x:Name="Light3">
<ModelVisual3D.Content>
<DirectionalLight Color="White" Direction="0,-1,-0.5" />
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
<Canvas x:Name="canvasOn3D" Background="#00E6FFFF"
Margin="20,52,102,18"></Canvas>
<Label Content="Trayinfo &" FontSize="16" FontWeight="Bold" Height="34" HorizontalAlignment="Left" Margin="192,0,0,0" Name="lblTrayinfo" VerticalAlignment="Top" Width="194" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,257" Name="btn9" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,232" Name="btn8" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button HorizontalAlignment="Left" Margin="499,149,0,207" Name="btn7" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,182" Name="btn6" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,157" Name="btn5" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,132" Name="btn4" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,107" Name="btn3" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,82" Name="btn2" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,57" Name="btn1" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Button Height="25" HorizontalAlignment="Left" Margin="499,0,0,282" Name="btn10" VerticalAlignment="Bottom" Width="50" Background="White" BorderThickness="0" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,57" Name="lbl1" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,82" Name="lbl2" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,107" Name="lbl3" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,132" Name="lbl4" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,157" Name="lbl5" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,182" Name="lbl6" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,207" Name="lbl7" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,232" Name="lbl8" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,257" Name="lbl9" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Height="25" HorizontalAlignment="Right" Margin="0,0,12,282" Name="lbl10" VerticalAlignment="Bottom" Width="45" Background="White" BorderBrush="White" />
<Label Content="Pacakage info" HorizontalAlignment="Center" Width="Auto" Height="32" Name="lblPkgname" FontSize="16" FontWeight="Bold" Margin="300,0,191,347" />
</Grid>
private void OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs args)
{
if (args.RightButton == MouseButtonState.Pressed)
{
currentPoint = args.GetPosition(this);
}
}
private void OnPreviewMouseRightButtonUp(object sender, MouseButtonEventArgs args)
{
if (args.RightButton == MouseButtonState.Released)
{
Line line = new Line();
line.Stroke = SystemColors.WindowFrameBrush;
line.X1 = currentPoint.X;
line.Y1 = currentPoint.Y;
line.X2 = currentPoint_2.X;
line.Y2 = currentPoint_2.Y;
line.StrokeThickness = 2;
canvasOn3D.Children.Add(line);
}
}
When I debug this program, it does not enter into this function when I right click the mouse.
Previewmouserightbuttondown doesn't seem to work even in a simple experiment.
You also have some oddities in your code there.
The co-ordinates of your mouse should be based on the canvas ( presumably ).
Here's some simpler working markup and code.
In Mainwindow I just added a canvas inside the default Grid:
<Grid>
<Canvas
Name="lineCanvas"
Background="Transparent"
PreviewMouseDown="lineCanvas_PreviewMouseDown"
PreviewMouseUp="lineCanvas_PreviewMouseUp"
>
</Canvas>
</Grid>
Notice I handle previewmousedown and up. The background of the canvas is set to transparent so it will be hit-testable.
My code ( which is working ):
public MainWindow()
{
InitializeComponent();
}
Point startPoint = new Point();
private void lineCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Right)
{
startPoint = Mouse.GetPosition(lineCanvas);
}
}
private void lineCanvas_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if (startPoint.X == 0 && startPoint.Y == 0)
{
return;
}
var currentPoint = Mouse.GetPosition(lineCanvas);
Line line = new Line();
line.Stroke = SystemColors.WindowFrameBrush;
line.X1 = startPoint.X;
line.Y1 = startPoint.Y;
line.X2 = currentPoint.X;
line.Y2 = currentPoint.Y;
line.StrokeThickness = 2;
lineCanvas.Children.Add(line);
startPoint = new Point();
}
Note that in our map editor where I do a similar process for drawing straight lines I add a "rubber band" temporary line which follows the mouse round showing where the line will end up. This re-assures the user that something is happening. You might want to consider that approach.
Related
Passing image selection from child window to MainPage
I'm working on a UWP FTP front-end application. I've created a UserControl that mimics the form of a standard Windows desktop icon (consisting of a StackPanel containing an Image and a TextBlock) which is to be used as a way of displaying saved favorites. What I'd like is for the user to be able to select any image to be used as the icon for each favorite, but have run into some pretty significant issue with getting this to work, I believe due to the Windows 10 "no access to filesystem" restriction--I haven't figured out that part yet. As a temporary substitution, I came up with the idea of having a set of icons for the user to select from, all stored within the Assets folder of the application. I've created an IconSelector page/child window (IconSelector.xaml) that pops up when appropriate, allowing the user to select from 8 different Images. The issue I'm running into is getting the selected Image back to the parent window (MainPage.xaml). I thought of just passing an int from child to parent, and then use that int with an enum to indicate the correct image, but I can't figure out how to pass any parameter at all between child and parent. I did find this question on SO, but it's for Silverlighbt and doesn't seem to work in UWP (unless I implemented it incorrectly). Does anybody have any idea on how to accomplish this? Code (relevant portions) pasted below: MainPage XAML <Canvas Grid.Column="1" Grid.Row="0" Grid.RowSpan="5" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Image Source="Assets\Red.png" Canvas.ZIndex="200" /> <Border x:Name="addFtpGrid" Visibility="Visible" Canvas.Left="300" Canvas.Top="300" Width="600" Height="350" BorderBrush="{ThemeResource SystemControlBackgroundAccentRevealBorderBrush}" BorderThickness="3"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="1.5*" /> <ColumnDefinition Width="3*" /> <ColumnDefinition Width="1.5*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Text="Link name" Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5,0" /> <TextBlock Text="Address" Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5,0" /> <TextBlock Text="Username" Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5,0" /> <TextBlock Text="Password" Grid.Column="0" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5,0" /> <TextBlock Text="Confirm Password" Grid.Column="0" Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5,0" /> <TextBox x:Name="linkNameEntry" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="1" Grid.Row="0" Margin="5,0" /> <TextBox x:Name="addressEntry" Text="ftp://" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" Margin="5,0" /> <TextBox x:Name="usernameEntry" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="1" Grid.Row="2" Margin="5,0" /> <PasswordBox x:Name="passwordEntry" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="1" Grid.Row="3" Margin="5,0"> </PasswordBox> <PasswordBox x:Name="confirmPasswordEntry" HorizontalAlignment="Stretch" VerticalAlignment="Center" Grid.Column="1" Grid.Row="4" Margin="5,0" LostFocus="ConfirmPasswordEntry_LostFocus" /> <Viewbox Grid.Column="2" Grid.Row="0" Grid.RowSpan="4" Margin="5,15,5,0"> <Image x:Name="imageEntry" Source="Assets/SquircleX.png" Tapped="ImageEntry_TappedAsync" /> </Viewbox> <TextBlock Text="Click image to change" Grid.Column="2" Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" /> <Button x:Name="saveNewFtpLink" Click="SaveNewFtpLink_Click" Content="Save Changes" Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="3" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"/> </Grid> </Border> </Canvas> MainPage C# private async void ImageEntry_TappedAsync(object sender, TappedRoutedEventArgs e) { IconSelector selector = new IconSelector(); selector.Tapped += new TappedEventHandler(selector_Tapped); ShowDialog(selector); //List<string> fileTypes = new List<string> { ".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff", ".ico" }; //FileOpenPicker picker = new FileOpenPicker(); //picker.ViewMode = PickerViewMode.Thumbnail; //picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; //foreach (string type in fileTypes) //{ // picker.FileTypeFilter.Add(type); //} //StorageFile file = await picker.PickSingleFileAsync(); //if(file != null) //{ // imageEntry.Source = new BitmapImage(new Uri(file.Path)); // Image selectedImage = new Image(); // selectedImage.Source = imageEntry.Source; // imageEntry = selectedImage; // imageEntry.UpdateLayout(); // imageToken = StorageApplicationPermissions.FutureAccessList.Add(file); //} } IconSelector XAML <Page x:Class="FtpSharp.IconSelector" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:FtpSharp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="175" d:DesignWidth="600" Background="{ThemeResource ContentDialogBackgroundThemeBrush}"> <Page.Resources> <Style x:Key="selectionStyle" TargetType="Border"> <Setter Property="CornerRadius" Value="10" /> <Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="Margin" Value="10,10,5,5" /> <Setter Property="BorderThickness" Value="3" /> </Style> </Page.Resources> <Grid VerticalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="iconViewer" Orientation="Horizontal" Width="1100"> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpRed.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpOrange.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpYellow.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpGreen.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpBlue.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpPurple.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpPink.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> <Border Style="{StaticResource selectionStyle}"> <Image Source="Assets\FtpTeal.png" Margin="4" Height="96" Tapped="Image_Tapped" /> </Border> </StackPanel> </ScrollViewer> <Button x:Name="commitSelection" Content="Save" Grid.Row="1" Foreground="Black" HorizontalAlignment="Center" Margin="0,10" /> </Grid> IconSelector C# using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; namespace FtpSharp { public sealed partial class IconSelector : Page { private static readonly DependencyProperty SelectedIconProperty = DependencyProperty.Register("SelectedIcon", typeof(int), typeof(IconSelector), new PropertyMetadata(0)); public int SelectedIcon { get { return (int)GetValue(SelectedIconProperty); } set { SetValue(SelectedIconProperty, value); } } public IconSelector() { this.InitializeComponent(); } private void Image_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e) { Image tappedImage = (Image)sender; Border tappedBorder = (Border)tappedImage.Parent; SolidColorBrush blue = new SolidColorBrush(Colors.Blue); foreach (Border border in iconViewer.Children) { border.BorderBrush = new SolidColorBrush(Colors.Transparent); } tappedBorder.BorderBrush = new SolidColorBrush(Color.FromArgb(255,0,0,255)); } }
In this case you can either provide the result as a public property of the IconSelector class, or as EventArgs of an event. You already have the SelectedIcon property there, so you can use it. To notify the MainPage that the selection has occurred, you need to add an event to IconSelector - for example DialogCompleted: public event EventHandler<int> DialogCompleted; You will trigger this event when the dialog is confirmed by the user: DialogCompleted?.Invoke(this, SelectedIcon); Then within MainPage, you need to subscribe to this event: IconSelector selector = new IconSelector(); selector.DialogCompleted += IconDialogCompleted; ShowDialog(selector); And now get the SelectedIcon inside the handler: private void IconDialogCompleted(object sender, int selectedIcon) { //do something with selectedIcon }
Image not in center XAML UWP
I'm not able to put my image and lines (the lines are drawn on top of the image) in the center of the 2nd column (the center column) of my grid. I always have lines and image left aligned...I almost tried everything (horizontalAlignment="center"...) The code is the following: <Page x:Class="WhirlpoolSQC.DetailPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:WhirlpoolSQC" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0" VerticalAlignment="Top"> <TextBox x:Name="textBox" Text="Defects" Margin="0,11,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="24" IsReadOnly="True"/> </StackPanel> <Canvas Grid.Column="1" > <Image Name="image_detail" VerticalAlignment="Center" Width="840"/> <Canvas VerticalAlignment="Center" Width="840" > <Line X1="280" Y1="0" X2="280" Y2="630" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3" /> <Line X1="560" Y1="0" X2="560" Y2="630" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3" /> <Line X1="0" Y1="210" X2="840" Y2="210" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3"/> <Line X1="0" Y1="420" X2="840" Y2="420" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3"/> </Canvas> </Canvas> <StackPanel Grid.Column="2" VerticalAlignment="Top"> <TextBox x:Name="textBox2" Text="List of defecs" Margin="0,11,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="24" IsReadOnly="True"/> <ListView x:Name="listView" HorizontalAlignment="Stretch" Margin="0,61,10,0" BorderThickness="1,1,1,1" RequestedTheme="Default" BorderBrush="Black" VerticalAlignment="Top" Height="536"/> </StackPanel> </Grid> Basically, I need something like: Furthermore, I would like that the image auto fit inside the column in a way that it is not cutted when I put full-screen. I don't understand wherte is the isse. thanks
I played around your code and made some changes to get what's shown in your wireframe. The image will always stay in the center and will move or scale according to the window size. Desktop View Mobile or Tablet View //MainPage.Xaml <Page x:Class="App1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App1" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" SizeChanged="YourPage_SizeChanged" x:Name="YourPage" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid Padding="20"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*" MaxWidth="200" /> <ColumnDefinition Width="4*" /> <ColumnDefinition Width="1*" MaxWidth="200" /> </Grid.ColumnDefinitions> <StackPanel Grid.Column="0" VerticalAlignment="Top" Padding="20"> <TextBlock x:Name="textBox1" Text="List of Affects" Margin="0,11,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="Blue" /> <ListView x:Name="listView1" HorizontalAlignment="Stretch" Margin="0,40,0,0" BorderThickness="1,1,1,1" RequestedTheme="Default" BorderBrush="Black" VerticalAlignment="Stretch" > <ListViewItem>Item1</ListViewItem> <ListViewItem>Item2</ListViewItem> <ListViewItem>Item3</ListViewItem> </ListView> </StackPanel> <Grid Grid.Column="1" Padding="0" VerticalAlignment="Center" Background="White" HorizontalAlignment="Center" > <Image Name="image_detail" MaxWidth="840" Source="ms-appx:///Assets/1.jpg" /> <Line x:Name="Line1" X1="280" Y1="0" X2="280" Y2="630" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3" /> <Line x:Name="Line2" X1="560" Y1="0" X2="560" Y2="630" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3" /> <Line x:Name="Line3" X1="0" Y1="210" X2="840" Y2="210" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3"/> <Line x:Name="Line4" X1="0" Y1="420" X2="840" Y2="420" Stroke="Black" StrokeDashArray="2, 5" StrokeThickness="3"/> </Grid> <StackPanel Grid.Column="2" VerticalAlignment="Top" Padding="20"> <TextBlock x:Name="textBox2" Text="List of defects" Margin="0,11,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Foreground="Blue" /> <ListView x:Name="listView2" HorizontalAlignment="Stretch" Margin="0,40,0,0" BorderThickness="1,1,1,1" RequestedTheme="Default" BorderBrush="Black" VerticalAlignment="Stretch" > <ListViewItem>Item1</ListViewItem> <ListViewItem>Item2</ListViewItem> <ListViewItem>Item3</ListViewItem> </ListView> </StackPanel> </Grid> //MainPage.Xaml.cs public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private void YourPage_SizeChanged(object sender, SizeChangedEventArgs e) { try {if (image_detail.ActualHeight > 0 && image_detail.ActualWidth > 0) { Line1.Y2 = image_detail.ActualHeight; Line1.X1 = image_detail.ActualWidth / 3; Line1.X2 = image_detail.ActualWidth / 3; Line2.Y2 = image_detail.ActualHeight; Line2.X1 = (image_detail.ActualWidth / 3) * 2; Line2.X2 = (image_detail.ActualWidth / 3) * 2; Line3.X2 = image_detail.ActualWidth; Line3.Y1 = image_detail.ActualHeight / 3; Line3.Y2 = image_detail.ActualHeight / 3; Line4.X2 = image_detail.ActualWidth; Line4.Y1 = (image_detail.ActualHeight / 3) * 2; Line4.Y2 = (image_detail.ActualHeight / 3) * 2; } } catch { } } }
WPF Move grid Error
I'm trying something new. I've got a few grids, and when I try to grab a grid i want to move its parent around my top grid. At the moment I get a System.NullReferenceException on m_startOffset = new Vector(translate.X, translate.Y); in the Grid_MouseDown method. Does someone know how i should tackle this problem? UI: <Grid x:Name="GridHost"> <Grid x:Name="GRLogin" Margin="1401,292,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="501" d:IsHidden="True" Focusable="True"> <Grid Height="30" VerticalAlignment="Top" Background="#FF1585B5" Margin="0" MouseLeftButtonUp="Grid_MouseUp" MouseLeftButtonDown="Grid_MouseDown" MouseMove="Grid_MouseMove" > <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button x:Name="GRLoginClose" Content="X" Background="{x:Null}" Foreground="White" FontWeight="Bold" OpacityMask="Black" Margin="470,0,0,0" Width="30" Height="30" Click="Close"/> <Button Content="-" Background="{x:Null}" Foreground="White" FontWeight="Bold" OpacityMask="Black" Margin="0,0,30,0" Width="30" Height="30" HorizontalAlignment="Right"/> <Label Content="Login" HorizontalAlignment="Center" Margin="0" FontWeight="Bold"/> </Grid> <Grid HorizontalAlignment="Left" Height="250" Margin="0,30,0,0" VerticalAlignment="Top" Width="500" Background="#FF262626"> <PasswordBox HorizontalAlignment="Center" Margin="206,130,120,94" VerticalAlignment="Center" Width="174"/> <Label Content="Password" HorizontalAlignment="Center" Margin="122,130,308,94" VerticalAlignment="Center" RenderTransformOrigin="-1.737,0.462" Width="70"/> <Label Content="Username" HorizontalAlignment="Center" Margin="122,99,308,125" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" Width="70"/> <TextBox HorizontalAlignment="Center" Height="23" Margin="206,99,120,125" TextWrapping="Wrap" VerticalAlignment="Center" Width="174" RenderTransformOrigin="0.467,-0.346"/> <Button Content="Login" HorizontalAlignment="Left" VerticalAlignment="Top" Width="258" Margin="122,180,0,0" Height="40" Background="#FF1585B5" Foreground="White" FontWeight="Bold"/> </Grid> </Grid> Movement code: private void Grid_MouseDown(object sender, MouseButtonEventArgs e) { FrameworkElement element = ((Grid)sender).Parent as Grid; TranslateTransform translate = element.RenderTransform as TranslateTransform; m_start = e.GetPosition(GridHost); m_startOffset = new Vector(translate.X, translate.Y); element.CaptureMouse(); } private void Grid_MouseMove(object sender, MouseEventArgs e) { FrameworkElement element = ((Grid)sender).Parent as Grid; TranslateTransform translate = element.RenderTransform as TranslateTransform; if (element.IsMouseCaptured) { Vector offset = Point.Subtract(e.GetPosition(GridHost), m_start); translate.X = m_startOffset.X + offset.X; translate.Y = m_startOffset.Y + offset.Y; } } private void Grid_MouseUp(object sender, MouseButtonEventArgs e) { FrameworkElement element = ((Grid)sender).Parent as Grid; element.ReleaseMouseCapture(); }
Declare the parent Grid's RenderTransform in the XAML: <Grid x:Name="GRLogin" Margin="1401,292,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="501" d:IsHidden="True" Focusable="True"> <Grid.RenderTransform> <TranslateTransform/> </Grid.RenderTransform> ... </Grid> You could also check the RenderTransform for null, in which case you set it: element.RenderTransform = new TranslateTransform();
screen coordinates to sharpdx device context coordinates
I am new to the sharpdx. My current work flow is user can capture a pictures using webcam or any cam devices.now i am working to the new feature for users. user able to draw anything at top the image like (mspaint drawing).. So i desired to take xy points in mouse move event ...and its worked perfectly This Is My Designer code:- <Page x:Class="TEST.GraphicsPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:enums="clr-namespace:TEST.Model.Enum;assembly=TEST.Core" xmlns:common="clr-namespace:TEST.Core.Common;assembly=TEST.Core" xmlns:controls="clr-namespace:TEST.View.Controls" xmlns:metro="http://schemas.codeplex.com/elysium" xmlns:params="http://schemas.codeplex.com/elysium/params" mc:Ignorable="d" DataContext="{Binding Graphics, Source={StaticResource Locator}}" d:DesignHeight="800" d:DesignWidth="800" Title="GraphicsPage" Loaded="GraphicsPage_OnLoaded" Unloaded="GraphicsPage_OnUnloaded" MouseLeftButtonDown="Page_MouseLeftButtonDown" MouseLeftButtonUp="Page_MouseLeftButtonUp" PreviewMouseMove="Page_PreviewMouseMove"> <Grid x:Name="GrdPage" PreviewMouseDown="GrdPage_OnPreviewMouseDown" PreviewMouseWheel="GrdPage_OnPreviewMouseWheel" PreviewMouseMove="GrdPage_OnPreviewMouseMove" PreviewTouchDown="GrdPage_OnPreviewTouchDown"> <Grid.Background> <ImageBrush Stretch="Fill" ImageSource="{Binding BackgroundImage,Mode=TwoWay}" /> </Grid.Background> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="60" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <StackPanel x:Name="spRetake" Margin="0,13,0,0"> <Button Style="{DynamicResource BackButtonStyle}" Click="ButtonTrigger" CommandParameter="{x:Static enums:ButtonTriggerType.GoBack}" Command="{x:Static NavigationCommands.BrowseBack}" /> <TextBlock Text="Retake" Foreground="White" FontSize="15" HorizontalAlignment="Center" Margin="0,5,0,3" /> </StackPanel> <Grid x:Name="GrdGraphics" Grid.Row="0" Grid.Column="1" VerticalAlignment="Top"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid x:Name="grdImage" Grid.Column="0" Row="1" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="10,20,10,10"> <Grid HorizontalAlignment="Center" VerticalAlignment="Top"> ///Image is render to this control <Image x:Name="ImgPhoto" Source="{Binding ImageSource}" VerticalAlignment="Top" MaxHeight="1000" MaxWidth="1400" MouseLeftButtonDown="ImgPhoto_MouseLeftButtonDown" MouseLeftButtonUp="ImgPhoto_MouseLeftButtonUp" MouseMove="ImgPhoto_MouseMove" LostMouseCapture="ImgPhoto_LostMouseCapture" /> ///image control </Grid> <common:ProgressRing x:Name="PrLoading" Margin="100" Width="50" Height="50" VerticalAlignment="Center" IsActive="True" Foreground="{StaticResource VioletBrush}" Visibility="{Binding IsProgressVisible, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}" /> </Grid> <Grid Grid.Row="0" Grid.RowSpan="2" Grid.Column="1" Background="#99000000" Width="350" HorizontalAlignment="Right"> <Grid.RowDefinitions> <RowDefinition Height="20" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid Grid.Row="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid x:Name="GrdBorders" Margin="0,1,5,0" Visibility="{Binding ElementName=RbBorders, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> <Grid x:Name="GrdBorderTitle" Margin="5,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path Data="M0,9.6240009L6.6444809,9.6240009 6.6444809,13.513288 3.8906012,13.513288 3.8906012,52.242962 50.401927,52.242962 50.401927,49.327709 54.29,49.327709 54.29,56.134999 0,56.134999z M13.596372,3.8918467L13.596372,42.622032 60.1081,42.622032 60.1081,3.8918467z M9.7070002,0L64.000003,0 64.000003,46.509999 9.7070002,46.509999z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="5,0,0,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Borders" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <ListView x:Name="LstBorders" Background="Transparent" Margin="10,0,0,0" Grid.Row="1" SelectionChanged="LstBorders_SelectionChanged" ItemTemplate="{StaticResource GrapicsBorders}" OverridesDefaultStyle="True" ItemContainerStyle="{StaticResource GraphicsBorderListViewItemStyle}" Style="{StaticResource BackgroundGalleryListViewStyle}" /> </Grid> <Grid Grid.Column="0" x:Name="GrdEffects" Margin="5,1,5,0" Visibility="{Binding ElementName=RbFilters, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> <Grid x:Name="GrdEffectsTitle" Margin="0,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path HorizontalAlignment="Left" Data="M44.02605,20.846C44.02605,20.846 63.682006,24.103257 63.682006,38.870418 63.682006,42.772187 63.682006,49.664208 63.682006,53.565377 63.682006,66.221799 51.658645,58.015256 51.658645,50.555524 51.658645,40.738351 60.340182,37.173087 56.365394,33.199718z M25.529025,0C34.740886,0,39.964213,12.976948,40.281676,22.477042L40.293128,23.153271 40.635634,23.496004C44.15071,27.013427 48.794879,31.660645 50.360019,33.226604 52.995978,35.863305 51.193019,38.789006 50.089023,39.892009 48.98503,40.995406 28.241208,61.738416 28.241208,61.738416 25.936236,64.043717 17.883273,59.726617 10.261396,52.099114 2.63244,44.474008 -1.684536,36.421304 0.6204343,34.116004L22.599233,12.137394C22.599233,12.137394 24.072108,10.731551 26.071624,10.752226 27.118989,10.763056 28.310851,11.165289 29.511216,12.365994L31.998191,14.858796C33.357127,19.144596 32.48714,22.803398 31.852197,24.675799 30.646153,25.4376 29.839215,26.7741 29.839215,28.308002 29.839215,30.683002 31.76516,32.610805 34.144168,32.610805 36.52415,32.610805 38.450095,30.683002 38.450095,28.308002 38.450095,26.808 37.681121,25.490899 36.519145,24.7214 36.644145,23.702499 36.722144,21.654397 36.354106,19.211597 36.354106,19.211597 36.823226,19.681035 37.592975,20.451304L37.670257,20.528639 37.615382,20.036525C36.595061,11.949274 32.102916,2.4615231 25.529025,2.4615231 17.491012,2.4615231 15.683008,10.664832 15.683008,13.53907L13.222004,13.53907C13.222004,8.3047702,16.56301,0,25.529025,0z" Stretch="Uniform" Fill="#FFFFFFFF" Width="27" Height="27" Margin="5,0,0,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Filters" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <ListView x:Name="LstAdvancedEffect" Width="245" BorderBrush="White" Background="Transparent" Margin="10,0,0,0" Grid.Row="1" ItemTemplate="{StaticResource AdvancedEffect}" OverridesDefaultStyle="True" ItemContainerStyle="{StaticResource GraphicsEffectsListViewItemStyle}" Style="{StaticResource BackgroundGalleryListViewStyle}" /> </Grid> <Grid Grid.Column="0" x:Name="GrdEdit" Margin="5,1,5,0" VerticalAlignment="Top" Visibility="{Binding ElementName=RbEdit, Path=IsChecked, Mode=TwoWay, Converter={StaticResource BooleanToVisibilityConverter}}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid x:Name="GrdEditTitle" Margin="0,0,0,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="4" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <StackPanel Background="{StaticResource GreenBrushTransparent}" Width="50" Height="45" Orientation="Horizontal"> <Path Data="M28.359835,24.709L34.154998,30.052877 27.489999,31.461998z M21.8047,9.3869993L35.634799,9.3869993 30.5925,14.785472 22.157498,14.785472 21.7942,26.555977C21.7942,26.555977,21.324199,34.340181,12.747299,33.399679L5.3957494,33.19948 5.3957494,66.641893C5.395749,67.386995,6.0026888,67.990496,6.7473091,67.990496L44.531299,67.990496C45.273398,67.990496,45.880099,67.386995,45.880099,66.641893L45.880099,26.531576 51.279998,21.086176 51.279998,66.641893C51.279998,70.368498,48.2578,73.386999,44.531299,73.386999L6.7473091,73.386999C3.020749,73.386999,-1.0840647E-06,70.368498,3.4106051E-13,66.641893L3.4106051E-13,32.391882 2.6718787,29.574478 2.674559,29.49638 16.676999,14.785472 16.637898,14.785472 12.894499,18.732675 16.816399,14.579372 16.872298,14.579372 16.996098,14.449471 17.007798,14.449471z M43.024932,5.7089984L52.443,14.399388 40.817794,27.000999 40.619792,25.005898 37.516936,23.951198 37.429824,21.838896 34.333331,21.018594 33.961013,18.635792 31.396998,18.307692z M49.488421,0.0016288757C49.906531,0.018204689,50.296157,0.1614809,50.599376,0.4401598L57.271087,6.5981958C58.080863,7.3442647,57.976867,8.7787952,57.033995,9.7973371L55.755431,11.184999 46.149001,2.3229232 47.428763,0.93428135C48.01562,0.298316,48.791575,-0.026000023,49.488421,0.0016288757z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="5,0,5,0" RenderTransformOrigin="0.5,0.5" /> </StackPanel> <StackPanel Grid.Column="2" Background="{StaticResource GreenBrushTransparent}" Orientation="Horizontal"> <TextBlock Text="Basic Edit" FontSize="22" FontWeight="Light" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0" /> </StackPanel> </Grid> <StackPanel Grid.Row="1" Orientation="Vertical" Margin="10,0,0,0"> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Brightness" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Brightness" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Contrast" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Contrast" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Saturation" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Saturation" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Temp" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Temp" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Tint" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Tint" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> <StackPanel Margin="0,0,0,8"> <TextBlock Text="Sharpen / Blur" FontSize="18" Foreground="#929292" Margin="0,0,0,5" /> <Slider x:Name="Blur" params:Slider.ThumbThickness="9" HorizontalAlignment="Stretch" Margin="0,5,0,5" Minimum="-100" Maximum="100" Foreground="White" FontSize="18" FontWeight="Light" VerticalAlignment="Center" ValueChanged="Slider_ValueChanged" Style="{StaticResource SliderStyle}" /> </StackPanel> </StackPanel> </Grid> <StackPanel Grid.Column="1" HorizontalAlignment="Right"> <RadioButton x:Name="RbFilters" Margin="0,0,0,10" Height="55" IsChecked="{Binding IsFilterChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsFilter,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path HorizontalAlignment="Left" Data="M44.02605,20.846C44.02605,20.846 63.682006,24.103257 63.682006,38.870418 63.682006,42.772187 63.682006,49.664208 63.682006,53.565377 63.682006,66.221799 51.658645,58.015256 51.658645,50.555524 51.658645,40.738351 60.340182,37.173087 56.365394,33.199718z M25.529025,0C34.740886,0,39.964213,12.976948,40.281676,22.477042L40.293128,23.153271 40.635634,23.496004C44.15071,27.013427 48.794879,31.660645 50.360019,33.226604 52.995978,35.863305 51.193019,38.789006 50.089023,39.892009 48.98503,40.995406 28.241208,61.738416 28.241208,61.738416 25.936236,64.043717 17.883273,59.726617 10.261396,52.099114 2.63244,44.474008 -1.684536,36.421304 0.6204343,34.116004L22.599233,12.137394C22.599233,12.137394 24.072108,10.731551 26.071624,10.752226 27.118989,10.763056 28.310851,11.165289 29.511216,12.365994L31.998191,14.858796C33.357127,19.144596 32.48714,22.803398 31.852197,24.675799 30.646153,25.4376 29.839215,26.7741 29.839215,28.308002 29.839215,30.683002 31.76516,32.610805 34.144168,32.610805 36.52415,32.610805 38.450095,30.683002 38.450095,28.308002 38.450095,26.808 37.681121,25.490899 36.519145,24.7214 36.644145,23.702499 36.722144,21.654397 36.354106,19.211597 36.354106,19.211597 36.823226,19.681035 37.592975,20.451304L37.670257,20.528639 37.615382,20.036525C36.595061,11.949274 32.102916,2.4615231 25.529025,2.4615231 17.491012,2.4615231 15.683008,10.664832 15.683008,13.53907L13.222004,13.53907C13.222004,8.3047702,16.56301,0,25.529025,0z" Stretch="Uniform" Fill="#FFFFFFFF" Width="27" Height="27" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Filters" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> <RadioButton x:Name="RbBorders" Margin="0,0,0,10" Width="60" Height="55" IsChecked="{Binding IsBorderChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsBorder,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path Data="M0,9.6240009L6.6444809,9.6240009 6.6444809,13.513288 3.8906012,13.513288 3.8906012,52.242962 50.401927,52.242962 50.401927,49.327709 54.29,49.327709 54.29,56.134999 0,56.134999z M13.596372,3.8918467L13.596372,42.622032 60.1081,42.622032 60.1081,3.8918467z M9.7070002,0L64.000003,0 64.000003,46.509999 9.7070002,46.509999z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Borders" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> <RadioButton x:Name="RbEdit" Height="55" Margin="0,0,0,10" IsChecked="{Binding IsEditChecked,Mode=TwoWay}" Style="{StaticResource EffectsRadioButtonStyle}" Visibility="{Binding IsEdit,Mode=TwoWay,Converter={StaticResource BooleanToVisibilityConverter}}"> <RadioButton.ContentTemplate> <DataTemplate> <StackPanel Orientation="Vertical"> <Path Data="M28.359835,24.709L34.154998,30.052877 27.489999,31.461998z M21.8047,9.3869993L35.634799,9.3869993 30.5925,14.785472 22.157498,14.785472 21.7942,26.555977C21.7942,26.555977,21.324199,34.340181,12.747299,33.399679L5.3957494,33.19948 5.3957494,66.641893C5.395749,67.386995,6.0026888,67.990496,6.7473091,67.990496L44.531299,67.990496C45.273398,67.990496,45.880099,67.386995,45.880099,66.641893L45.880099,26.531576 51.279998,21.086176 51.279998,66.641893C51.279998,70.368498,48.2578,73.386999,44.531299,73.386999L6.7473091,73.386999C3.020749,73.386999,-1.0840647E-06,70.368498,3.4106051E-13,66.641893L3.4106051E-13,32.391882 2.6718787,29.574478 2.674559,29.49638 16.676999,14.785472 16.637898,14.785472 12.894499,18.732675 16.816399,14.579372 16.872298,14.579372 16.996098,14.449471 17.007798,14.449471z M43.024932,5.7089984L52.443,14.399388 40.817794,27.000999 40.619792,25.005898 37.516936,23.951198 37.429824,21.838896 34.333331,21.018594 33.961013,18.635792 31.396998,18.307692z M49.488421,0.0016288757C49.906531,0.018204689,50.296157,0.1614809,50.599376,0.4401598L57.271087,6.5981958C58.080863,7.3442647,57.976867,8.7787952,57.033995,9.7973371L55.755431,11.184999 46.149001,2.3229232 47.428763,0.93428135C48.01562,0.298316,48.791575,-0.026000023,49.488421,0.0016288757z" Stretch="Uniform" Fill="#FFFFFFFF" Width="28" Height="28" Margin="0,0,5,0" RenderTransformOrigin="0.5,0.5" /> <TextBlock Text="Edit" Foreground="White" HorizontalAlignment="Center" Margin="0,0,0,3" /> </StackPanel> </DataTemplate> </RadioButton.ContentTemplate> </RadioButton> </StackPanel> </Grid> </Grid> </Grid> <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" BorderBrush="{StaticResource GreenBrush}" BorderThickness="0,2,0,0" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="#4C000000" Height="75"> <Button Height="40" Width="100" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" Content="Next" Style="{DynamicResource NextButtonStyle}" Click="ButtonTrigger" CommandParameter="{x:Static enums:ButtonTriggerType.Next}" /> </Border> <MediaElement Grid.Row="0" Grid.Column="0" x:Name="MdeBackgroundMusic" Source="{Binding BackgroundMusic}" Visibility="Collapsed" LoadedBehavior="Play" UnloadedBehavior="Manual" MediaEnded="MdeBackgroundMusic_OnMediaEnded" /> </Grid> </Page> Codebehind //List for added points public List<Point> DrawPoint = new List<Point>(); and my mouse move event like this private void Page_PreviewMouseMove(object sender, MouseEventArgs e) { if (draw) { if (DrawPoint .Count > 0) { var exist = DrawPoint .Any(i => i == e.Getpostion(null)); if (!exist) { DrawPoint .Add(e.Getpostion(null)); } else { DrawPoints.Add(e.Getpostion(null)); } } } } at that time i was draw the points to the render method like this if (_point != null){ SolidColorBrush aBrush = new SolidColorBrush(_d2DContext, SharpDX.Color.Red); //looped every added point in user foreach (var point in _point) { _d2DContext.FillEllipse(new Ellipse(new Vector2((float)point.X, (float)point.Y), 10, 10), aBrush); } } but drawed points its wrong what is iam missing. please help me out Image Notes Redpoint is now brush the point using above code X Mark indicates mouse postion on the image.
I have faced similar Issue when i working my last project in your Move Event //get current touch point var currentPoint = e.GetTouchPoint(this); // calculate screen margin for grid image left var x = (currentPoint.Bounds.X - (spRetake.ActualWidth + grdImage.Margin.Left)) / grdImage.ActualWidth; var y = (currentPoint.Bounds.Y - grdImage.Margin.Top) / grdImage.ActualHeight; DrawPoints.Add(new System.Windows.Point(x,y)); And Your Device Class you Need to calculate rendering device width and height also you should calculate orginal image width and height rendering image actual width // original dimensions var width = CurrentBitmapSize.Width; var height = CurrentBitmapSize.Height; // Find the longest and shortest dimentions var longestDimension = (width > height) ? width : height; var shortestDimension = (width < height) ? width : height; var factor = ((double)longestDimension) / (double)shortestDimension; // Set width as max double newWidth = (float)_d2DContext.PixelSize.Width; var newHeight = (float)_d2DContext.PixelSize.Width / factor; //If height is actually greater, then we reset it to use height instead of width if (width < height) { newWidth = (float)_d2DContext.PixelSize.Height / factor; newHeight = (float)_d2DContext.PixelSize.Height; } _drawBrush = new SolidColorBrush(d2DContext, SharpDX.Color.Blue); var pWidth = _d2DContext.PixelSize.Width; var pHeight = _d2DContext.PixelSize.Height; int elipseWidth = 10; int elipseheight = 15; foreach (var point in MousePoints.Distinct().ToList()) { var x = (point.X * pWidth) + (elipseWidth / 2); var y = (point.Y * pHeight) + (elipseheight / 2); var ellipseCenter = new Vector2((float)x, (float)y); var ellipse = new Ellipse(ellipseCenter, elipseWidth, elipseheight); //omit if the point not in image container if (newWidth >= x && newHeight >= y + 2) { d2DContext.FillEllipse(ellipse, _drawBrush); } } i think its should worked for you...Any Queries Comment It..
'Failed to create a 'Type' from the text 's:MoveThumb'.'
sorry if I repeat the topic. However none of the previous solution worked for me. I`ve tried to make a teplate for a ContentControl which would be generated automatically when a user pushes the button. Xaml here: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:WpfApplication1" Title="MainWindow" Height="371" Width="556" Closing="Window_Closing" KeyDown="Window_KeyDown"> <Grid Height="325" Width="518"> <Grid.RowDefinitions> <RowDefinition Height="172*" /> <RowDefinition Height="153*" /> </Grid.RowDefinitions> <MediaElement Height="21" HorizontalAlignment="Left" Name="mediaElement1" VerticalAlignment="Top" Width="506" MediaOpened="mediaElement1_MediaOpened" Margin="0,30,0,0" UnloadedBehavior="Manual" LoadedBehavior="Manual" Stretch="None"/> <ListBox Height="Auto" HorizontalAlignment="Stretch" Margin="359,151,0,0" Name="listBox1" VerticalAlignment="Stretch" Width="Auto" ItemsSource="{Binding}" Grid.RowSpan="2" /> <ListBox Height="Auto" HorizontalAlignment="Stretch" Margin="0,151,368,0" Name="listBox2" VerticalAlignment="Stretch" ItemsSource="{Binding}" Grid.RowSpan="2" /> <Button Content="Browse" Height="23" HorizontalAlignment="Left" Margin="359,122,0,0" Name="Enviroment" VerticalAlignment="Top" Width="75" Click="Enviroment_Click" /> <Button Content="Enviroment" Height="23" HorizontalAlignment="Left" Margin="12,122,0,0" Name="Browse" VerticalAlignment="Top" Width="75" Click="Browse_Click" /> <Button Content="Play" Height="23" HorizontalAlignment="Left" Margin="156,79,0,0" Name="Play" VerticalAlignment="Top" Width="75" Click="Play_Click" /> <Button Content="Stop" Height="23" HorizontalAlignment="Left" Margin="245,79,0,0" Name="Stop" VerticalAlignment="Top" Width="75" Click="Stop_Click" /> <Slider Height="23" HorizontalAlignment="Left" Margin="0,50,0,0" Name="slider1" VerticalAlignment="Top" Width="506" Thumb.DragStarted="slider1_DragStarted" Thumb.DragCompleted="slider1_DragCompleted" MouseDown="slider1_MouseDown" /> <Canvas Height="Auto" HorizontalAlignment="Stretch" Margin="156,151,165,0" Name="canvas1" VerticalAlignment="Stretch" Opacity="1" Background="White" OpacityMask="Black" Grid.RowSpan="2"> <Canvas.Resources> <ControlTemplate x:Key="MoveThumbTemplate" TargetType="{x:Type s:MoveThumb}"> <Rectangle Fill="Transparent"/> </ControlTemplate> <ControlTemplate x:Key="DesignerItemTemplate" TargetType="Control"> <Grid> <s:MoveThumb Template="{StaticResource MoveThumbTemplate}" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}" Cursor="SizeAll"/> <ContentPresenter Content="{TemplateBinding ContentControl.Content}"/> </Grid> </ControlTemplate> </Canvas.Resources> <ContentControl Name="contentControl1" Width="26" Height="25" Canvas.Left="79" Canvas.Top="70" Template="{StaticResource DesignerItemTemplate}"> <Ellipse Canvas.Left="86" Canvas.Top="70" Height="19" Name="ellipse1" Stroke="Black" Width="19" Fill="Red" IsHitTestVisible="False" /> </ContentControl> <ContentControl Name="contentControl2" Width="26" Height="26" Canvas.Left="140" Canvas.Top="26" Template="{StaticResource DesignerItemTemplate}"> <Ellipse Canvas.Left="140" Canvas.Top="33" Fill="#FF93FF14" Height="19" Name="ellipse2" Stroke="Black" Width="19" IsHitTestVisible="False" /> </ContentControl> </Canvas> <TextBlock Height="23" HorizontalAlignment="Right" Margin="0,123,236,0" Name="textBlock1" Text="/ 200" VerticalAlignment="Top" Width="37" /> <TextBlock Height="23" HorizontalAlignment="Right" Margin="0,123,301,0" Name="textBlock2" Text="/ 162" VerticalAlignment="Top" Width="39" /> <TextBlock Height="22" Margin="156,123,334,0" Name="textBlock3" Text="" VerticalAlignment="Top" /> <TextBlock Height="23" Margin="0,123,257,0" Name="textBlock4" Text="" VerticalAlignment="Top" HorizontalAlignment="Right" Width="38" /> <Button Content="Load" Height="23" HorizontalAlignment="Left" Margin="443,122,0,0" Name="Load" VerticalAlignment="Top" Width="63" Click="Load_Click" /> </Grid> and the part of the class: using System; using System.Collections.Generic; using System.Linq; using System.Text; using rayav_csharp; using System.Windows.Shapes; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Markup; string template = "<ControlTemplate x:Key=\"MoveThumbTemplate\" TargetType=\"{x:Type s:MoveThumb}\">" + "<Rectangle Fill=\"Transparent\"/>" + "</ControlTemplate>"; ParserContext parser = new ParserContext(); parser.XmlnsDictionary.Add("","http://schemas.microsoft.com/winfx/2006/xaml/presentation"); parser.XmlnsDictionary.Add("x","http://schemas.microsoft.com/winfx/2006/xaml"); parser.XmlnsDictionary.Add("s","clr-namespace:WpfApplication1"); control.Template = (ControlTemplate)XamlReader.Parse(template, parser); public class MoveThumb : Thumb { public MoveThumb() { DragDelta += new DragDeltaEventHandler(this.MoveThumb_DragDelta); } private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e) { Control item = this.DataContext as Control; if (item != null) { double left = Canvas.GetLeft(item); double top = Canvas.GetTop(item); Canvas.SetLeft(item, left + e.HorizontalChange); Canvas.SetTop(item, top + e.VerticalChange); } } } Anyone can help? Greetings