XAML | When used XamlReader.Parse, not able to refer the items using the LogicalTreeHelper/VisualTre
- by Roopesh
Hi,
I am setting the dynamic xaml (I am reading the xaml from the DB) for the content of a tab using the below statement.
Tab.Content = XamlReader.Parse(xaml, ctx)
After setting the content, if I try getting the children using the VisualTreeHelper, but I am not able to get. How ever I dont have this issue when I construct the xaml statically.
Here is the code to reading the xaml.
Dim XmlDocument = New XmlDataDocument()
Dim IID As String = Nothing
Dim xaml As String = Nothing
Dim Tab As New TabItem
Dim TempPanel As XmlNode = Nothing
'Tab.Height = 0
Try
XmlDocument.Load(Directory.GetCurrentDirectory & "\Xml\AppFile.xml")
pXmlDoc = XmlDocument
xaml = XmlDocument.SelectSingleNode("//Grid").OuterXml
Dim AsmName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Dim ctx As ParserContext = New ParserContext() ' New ParserContext()
ctx.XamlTypeMapper = New XamlTypeMapper(New String() {AsmName})
ctx.XamlTypeMapper.AddMappingProcessingInstruction("src", "WpfToolkitDataGridTester", AsmName)
ctx.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation")
ctx.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml")
ctx.XmlnsDictionary.Add("src", "clr-namespace:WpfToolkitDataGridTester;assembly=" + AsmName)
Tab.Name = "Tab" & Grid1Tab.Items.Count + 1
Tab.Header = "AppFile-1"
Tab.BorderThickness = New Thickness(0)
Tab.IsSelected = True
Tab.Content = XamlReader.Parse(xaml, ctx)
Grid1Tab.Items.Add(Tab)
Return True
Catch ex As Exception
Throw
End Try
Here is the code to access the item after constructing the XAML.
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(myVisual) - 1
Dim childVisual As Visual = CType(VisualTreeHelper.GetChild(myVisual, i), Visual)
Select Case childVisual.DependencyObjectType.Name
Case "ComboBox"
AddHandler CType(childVisual, ComboBox).SelectionChanged, AddressOf ComboBox_SelectChanged
Case "CheckBox"
AddHandler CType(childVisual, CheckBox).Checked, AddressOf CheckBoxClicked
AddHandler CType(childVisual, CheckBox).Unchecked, AddressOf CheckBoxClicked
Case "RadioButton"
AddHandler CType(childVisual, RadioButton).Checked, AddressOf CheckBoxClicked
Case "TabControl"
For Each item As System.Windows.Controls.TabItem In CType(childVisual, TabControl).Items
EnumVisual(item.Content)
Next
End Select
EnumVisual(childVisual)
Next i
any help is highly appreciated.
Thanks,