2010-01-29 4 views
2

Я пытаюсь получить ссылку на элемент управления ElementHost. Например, в приведенном ниже коде мне нужно сначала использовать содержимое testImage из пользовательского элемента управления WPF для обеда события. Элемент управления WPF добавляется во время выполнения, так же как и элемент управления ElementHost, поэтому я не могу использовать имя элемента управления WPF или имя ElementHost. Моя логика заключается в том, чтобы заставить родительский пользовательский элемент управления WPF «testImage», а затем получить родительский элемент ElementHost пользовательского элемента управления WPF. Но у меня проблемы с написанием кода. Пожалуйста, порекомендуйте. Благодарю.Как получить элемент управления ElementHost, учитывая один элемент управления WPF

<UserControl x:Class="WpfTest” 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="300" Height="300"> 
    <Grid> 
     <Label FontSize="10" Height="24" Margin="74,16,0,0" Name="testLabel" VerticalAlignment="Top" /> 
     <Image Name="testImage" Stretch="Uniform" HorizontalAlignment="Left" Width="64" Height="81" VerticalAlignment="Top" Margin="8,0,0,0"/> 
    </Grid> 
</UserControl> 

ответ

1

Вот несколько кодов, которые могут вам помочь. Ключевые моменты:

  • Имя в ElementHost при ее создании во время выполнения
  • Make использовать функцию FindVisualChildByName помощь() для поиска дерева WPF, чтобы получить нужный режим управления

Я надеюсь, это помогает!

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

     Dim ElementHost1 As New System.Windows.Forms.Integration.ElementHost 
     Dim WpfTest1 As New WindowsApplication1.WPFTest 

     ElementHost1.Dock = DockStyle.Fill 
     ElementHost1.Name = "ElementHost1" 
     ElementHost1.Child = WpfTest1 

     Me.Controls.Add(ElementHost1) 
    End Sub 

    Private Sub GetImageReference_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim ElementHost1 As System.Windows.Forms.Integration.ElementHost = Me.Controls("ElementHost1") 
     Dim TheGrid As System.Windows.Controls.Grid = CType(ElementHost1.Child, WPFTest).MyGrid 
     Dim ImageTest As System.Windows.Controls.Image = FindVisualChildByName(TheGrid, "testImage") 
     Stop 
    End Sub 

    Public Function FindVisualChildByName(ByVal parent As System.Windows.DependencyObject, ByVal Name As String) As System.Windows.DependencyObject 
     For i As Integer = 0 To System.Windows.Media.VisualTreeHelper.GetChildrenCount(parent) - 1 
      Dim child = System.Windows.Media.VisualTreeHelper.GetChild(parent, i) 
      Dim controlName As String = child.GetValue(System.Windows.Controls.Control.NameProperty) 
      If controlName = Name Then 
       Return child 
      Else 
       Dim res = FindVisualChildByName(child, Name) 
       If Not res Is Nothing Then 
        Return res 
       End If 
      End If 
     Next 
     Return Nothing 
    End Function 
+0

Спасибо, я попробую. Я дам знать, помогло ли это. – Serg

+0

Это сработало для меня! Спасибо. Поздний ответ, но вы действительно помогли кому-то :) – Zer0

Смежные вопросы