Benutzer mit den meisten Antworten
Windows Forms WPF Elementhost wird nicht richtig aktualisiert

Frage
-
Ich zeige auf einer Windows Forms mittels des Elementhost ein WPF Control an. Anzeige klappt soweit auch . Nur habe ich diverse Anzeige Felder gebunden an eine Klasse damit diverse Texte angezeigt werden.
Wenn ich jetzt die Windows Form aufrufe sollen die aktualisierten Werte direkt im WPF Control angezeigt werden. Das tun sie aber nicht. Woran kann das liegen?
Antworten
-
Hi Michael,
Ursache für das fehlende Aktualisieren der Anzeigen sind viele möglich. Hier mal eine kleine minimalistische Demo, wie das funktioniert. Mit dem Button_Click wir die aktuelle Zeit zur Anzeige gebracht.WindowsForm
Imports System.Windows.Forms.Integration Imports WpfControlLibrary1 Public Class Form13 Private Ehost As New ElementHost With {.Height = 50} Dim uc1 As New Form13UserControl1 Private Sub Form12_Load(sender As Object, e As EventArgs) Handles MyBase.Load Ehost.Child = uc1 Me.Controls.Add(Ehost) End Sub End Class
XAM UserControl in WpfControlLibrary1:
<UserControl x:Class="Form13UserControl1" 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:local="clr-namespace:WpfControlLibrary1" mc:Ignorable="d" d:DesignHeight="100" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBox Text="{Binding Info}"/> <Button Grid.Column="1" Content="Zeit anzeigen" Click="Button_Click" /> </Grid> </UserControl>
Dazu der CodeBehind:
Imports System.ComponentModel Public Class Form13UserControl1 Implements INotifyPropertyChanged Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Info = Now.ToLongTimeString End Sub Private _info As String Public Property Info As String Get Return Me._info End Get Set(value As String) Me._info = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Info")) End Set End Property Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged End Class
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 30. Mai 2016 06:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Dienstag, 7. Juni 2016 08:22
Alle Antworten
-
Hallo Michael Floeter,
Würdest Du einen Codeausschnitt veröffentlichen? Hast Du Verweise auf die WPF-Namensräume (PresentationCore, PresentationFramework, UIAutomationProvider, UIAutomationTypes, and WindowsBase) hinzugefügt? Ich habe dieses Beispiel gefunden. Vielleicht hilft das DispatcherObject auch in Deinem Fall.
Gruß,
Dimitar
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Bearbeitet Dimitar DenkovMicrosoft contingent staff, Moderator Donnerstag, 26. Mai 2016 10:35
-
Hi Michael,
Ursache für das fehlende Aktualisieren der Anzeigen sind viele möglich. Hier mal eine kleine minimalistische Demo, wie das funktioniert. Mit dem Button_Click wir die aktuelle Zeit zur Anzeige gebracht.WindowsForm
Imports System.Windows.Forms.Integration Imports WpfControlLibrary1 Public Class Form13 Private Ehost As New ElementHost With {.Height = 50} Dim uc1 As New Form13UserControl1 Private Sub Form12_Load(sender As Object, e As EventArgs) Handles MyBase.Load Ehost.Child = uc1 Me.Controls.Add(Ehost) End Sub End Class
XAM UserControl in WpfControlLibrary1:
<UserControl x:Class="Form13UserControl1" 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:local="clr-namespace:WpfControlLibrary1" mc:Ignorable="d" d:DesignHeight="100" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBox Text="{Binding Info}"/> <Button Grid.Column="1" Content="Zeit anzeigen" Click="Button_Click" /> </Grid> </UserControl>
Dazu der CodeBehind:
Imports System.ComponentModel Public Class Form13UserControl1 Implements INotifyPropertyChanged Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Info = Now.ToLongTimeString End Sub Private _info As String Public Property Info As String Get Return Me._info End Get Set(value As String) Me._info = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Info")) End Set End Property Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged End Class
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 30. Mai 2016 06:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Dienstag, 7. Juni 2016 08:22