none
Windows Forms WPF Elementhost wird nicht richtig aktualisiert RRS feed

  • 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?

    Dienstag, 24. Mai 2016 08:38

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

    Donnerstag, 26. Mai 2016 11:40

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.

    Mittwoch, 25. Mai 2016 08:35
    Moderator
  • 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

    Donnerstag, 26. Mai 2016 11:40