Hallo und Guten Morgen zusammen,
ich möchte heute mal ein Thema anschneiden, das für mehrere interessant sein könnte: Wie gesagt, eine eigene Titelleiste designen.
Mein Ansatz:
Im entsprechenden Fenster:
Statt dem
Ich öffne das Fenster dann über einen WindowService, in dem ich das anzuzeigende ViewModel übergebe an die Funktion, die mir auch den Handle vom Fenster zurückgibt.
Und im ViewModel:
Jetzt kommt aber die erste Herausforderung:
In dem Fenster soll das Plugin eines VST-Instruments oder -Effekts angezeigt werden. Das ist bereits von der bass.dll implementiert und geht so:
Problem ist bloss, dass mir der Editor natürlich in dem neu geöffneten Fenster nicht unter meinem
Zweites Problem ist:
Ich möchte über die Titelleiste die Fensterposition mit dem
Bloss, wie komm ich an MouseMove und MouseButtonown ran, am besten noch MVVM-konform vom ViewModel aus?
Bin gespannt auf Eure Ideen
kafffee
ich möchte heute mal ein Thema anschneiden, das für mehrere interessant sein könnte: Wie gesagt, eine eigene Titelleiste designen.
Mein Ansatz:
Im entsprechenden Fenster:
XML-Quellcode
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="32"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <Rectangle Grid.Row="0" Fill="Red">
- <Rectangle.InputBindings>
- <MouseBinding MouseAction="LeftClick" Command="{Binding AendereFensterPosition}"/>
- </Rectangle.InputBindings>
- </Rectangle>
- <ContentPresenter Grid.Row="1" Content="{Binding}"/>
- </Grid>
Statt dem
Rectangle
könnte man auch ein Label oder sowas nehmen oder ein paar Buttons noch dazu... Das Fenster dann natürlich auf WindowStyle.None
setzen.Ich öffne das Fenster dann über einen WindowService, in dem ich das anzuzeigende ViewModel übergebe an die Funktion, die mir auch den Handle vom Fenster zurückgibt.
VB.NET-Quellcode
- Private Fenster As View.DialogFenster
- Public Function OeffneFenster(Breite As Integer, Hoehe As Integer, WindowName As String, DataContext As Object, Owner As Object) As IntPtr Implements ViewModel.Services.IWindowService.OpenWindow
- Dim MeinFenster As New View.DialogFenster(WindowName, DataContext, SizeToContent.WidthAndHeight, WindowStartupLocation.CenterScreen)
- MeinFenster.Owner = MeinFenster.FindOwnerWindow(Owner)
- Application.Current.Dispatcher.Invoke(Sub() MeinFenster.Show())
- Fenster = MeinFenster
- Dim FensterHandle As IntPtr = New WindowInteropHelper(Fenster).Handle
- Return FensterHandle
- End Function
Und im ViewModel:
Jetzt kommt aber die erste Herausforderung:
In dem Fenster soll das Plugin eines VST-Instruments oder -Effekts angezeigt werden. Das ist bereits von der bass.dll implementiert und geht so:
Problem ist bloss, dass mir der Editor natürlich in dem neu geöffneten Fenster nicht unter meinem
Rectangle
angezeigt wird sondern mitten drüber. GIbt es vielleicht eine Möglichkeit, das irgendwie in die richtige Grid-Zelle zu bugsieren oder zumindest die Position im Fenster zu bestimmen?Zweites Problem ist:
Ich möchte über die Titelleiste die Fensterposition mit dem
Rectangle
verschieben können. Da hab ich mir gedacht, ich brauche ja bloss irgendwie auf das MouseMove-Ereignis meines Rectangles
zu reagieren, dann zu checken, ob die Maustaste auch gerdückt ist, und dann das Fenster an die errechnete Position zu schieben.Bloss, wie komm ich an MouseMove und MouseButtonown ran, am besten noch MVVM-konform vom ViewModel aus?
Bin gespannt auf Eure Ideen
kafffee