Hallo miteinander
Ich hab folgendes Szenario:
Spoiler anzeigen
Nun möchte ich an der aktuellen Mauscursorposition eine, bzw. zwei rote Linien setzen, eine wenn sich die Maus bewegt, die andere wenn man klickt. Funktioniert auch soweit bis auf den Fakt, dass die Linien immer ca. 1 cm rechts vom Mauscursor erscheinen und ich hab keinen blassen Schimmer wieso. Bildschirmskalierung ist bei 100%, aber das Problem tritt auch bei anderen Skalierungen auf. Hat jemand eine Idee warum? Hab auch schon probiert, den Margin des Canvas auf 0 zu setzen.
Dieses DataPipe-Zeugs überträgt bei mir ActualWidth und ActualHeight auf die Properties im ViewModel.
Ich hab folgendes Szenario:
XML-Quellcode
- <Grid Margin="20">
- <Grid.RowDefinitions>
- <RowDefinition Height="10*"/>
- <RowDefinition Height="50*"/>
- <RowDefinition Height="10*"/>
- <RowDefinition Height="50*"/>
- </Grid.RowDefinitions>
- <Canvas ClipToBounds="True" Grid.Row="1" Margin="10, 10, 10, 10">
- <u:DataPiping.DataPipes>
- <u:DataPipeCollection>
- <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualWidth}"
- Target="{Binding Path=WFBreite, Mode=OneWayToSource}"/>
- <u:DataPipe Source="{Binding RelativeSource={RelativeSource AncestorType={x:Type Canvas}}, Path=ActualHeight}"
- Target="{Binding Path=WFHoehe, Mode=OneWayToSource}"/>
- </u:DataPipeCollection>
- </u:DataPiping.DataPipes>
- <Image Name="imgWF" Source="{Binding WaveForm, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Canvas.Top="0" Canvas.Left="0" MouseMove="imgWF_MouseMove" MouseLeftButtonDown="imgWF_MouseLeftButtonDown"/>
- <Line Stroke="Red" StrokeThickness="2" Y1="0" Y2="{Binding ActualHeight, ElementName=imgWF, UpdateSourceTrigger=PropertyChanged}" X1="{Binding MovingXPosWF, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" X2="{Binding MovingXPosWF, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
- <Line Stroke="Red" StrokeThickness="2" Y1="0" Y2="{Binding ActualHeight, ElementName=imgWF, UpdateSourceTrigger=PropertyChanged}" X1="{Binding ClickedXPosWF, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" X2="{Binding ClickedXPosWF, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
- </Canvas>
VB.NET-Quellcode
- Private Sub imgWF_MouseMove(sender As Object, e As MouseEventArgs)
- Dim vm = CType(Me.DataContext, RecordingVinylsViewModel)
- Dim MausPosition = e.GetPosition(Me)
- vm.MovingXPosWF = MausPosition.X
- End Sub
- Private Sub imgWF_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
- Dim vm = CType(Me.DataContext, RecordingVinylsViewModel)
- Dim MausPosition = e.GetPosition(Me)
- vm.ClickedXPosWF = MausPosition.X
- End Sub
VB.NET-Quellcode
- Private _MovingXPosWF As Double
- Public Property MovingXPosWF As Double
- Get
- Return _MovingXPosWF
- End Get
- Set(value As Double)
- _MovingXPosWF = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _ClickedXPosWF As Double
- Public Property ClickedXPosWF As Double
- Get
- Return _ClickedXPosWF
- End Get
- Set(value As Double)
- _ClickedXPosWF = value
- RaisePropertyChanged()
- End Set
- End Property
- Private _WaveForm As BitmapSource
- Public Property WaveForm As BitmapSource
- Get
- Return _WaveForm
- End Get
- Set(value As BitmapSource)
- _WaveForm = value
- RaisePropertyChanged()
- End Set
- End Property
Nun möchte ich an der aktuellen Mauscursorposition eine, bzw. zwei rote Linien setzen, eine wenn sich die Maus bewegt, die andere wenn man klickt. Funktioniert auch soweit bis auf den Fakt, dass die Linien immer ca. 1 cm rechts vom Mauscursor erscheinen und ich hab keinen blassen Schimmer wieso. Bildschirmskalierung ist bei 100%, aber das Problem tritt auch bei anderen Skalierungen auf. Hat jemand eine Idee warum? Hab auch schon probiert, den Margin des Canvas auf 0 zu setzen.
Dieses DataPipe-Zeugs überträgt bei mir ActualWidth und ActualHeight auf die Properties im ViewModel.