在Silverlight中使用可视树的帮助
我有一个问题,如何使用可视化树帮助器来获取我需要的对象。 我有一个名为DialogItemControll的用户控件,我从主页面调用它,如下所示:在Silverlight中使用可视树的帮助,silverlight,user-controls,hierarchy,visual-tree,Silverlight,User Controls,Hierarchy,Visual Tree,我有一个问题,如何使用可视化树帮助器来获取我需要的对象。 我有一个名为DialogItemControll的用户控件,我从主页面调用它,如下所示: DialogItemControll ivDialogWindow = new DialogItemControll() ivDialogWindow.ivSave.Click += new RoutedEventHandler(ivSave_Click); ivDialogWindow.Show();
DialogItemControll ivDialogWindow = new DialogItemControll()
ivDialogWindow.ivSave.Click += new RoutedEventHandler(ivSave_Click);
ivDialogWindow.Show();
然后我有一个方法ivSave\u Click,当我单击用户控件上的save按钮时会调用它。该方法如下所示:
void ivSave_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var firstStack = button.Parent as StackPanel;
var secondStack = firstStack.Parent as StackPanel;
TextBox te = secondStack.FindName("ivUserComment") as TextBox;}
在这里,您可以看到我尝试使用get parent等等。做得不太好。所以我想得到的是整个物体,比如:
var controll = ?? as DialogItemControll
我的DialogItemControll如下所示:
<C1:C1Window x:Class="DialogItemControll"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:C1="clr-namespace:C1.Silverlight;assembly=C1.Silverlight"
mc:Ignorable="d"
d:DesignHeight="418" d:DesignWidth="401">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="5,5,5,5">
<TextBlock Name="ivHelpComment" FontSize="18">test</TextBlock>
<TextBox Name="ivUserComment" BorderThickness="2,2,2,2" Height="170"></TextBox>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" >
<Button Name="ivSave" HorizontalAlignment="Right" Height="22" Width="70" Margin="0,10,20,0" Click="ivSave_Click">Spara</Button>
<Button Name="ivCancel" HorizontalAlignment="Right" Height="22" Width="70" Margin="0,10,20,0" Click="ivCancel_Click">Avbryt</Button>
</StackPanel>
</StackPanel>
</Grid>
测试
斯巴拉
阿夫布里特
C1窗口与用户控件相同,它只是第三方控件。
请帮助我如何使用树助手以良好的方式获取整个对象
谢谢您应该尝试Linq To VisualTree: 这允许您使用Linq样式的API查询可视化树(它实际上非常类似于LINQtoXML)。在您的示例中,您希望查找特定类型的子体。您可以按如下方式执行此操作:
var dialogItemControl = button.Descendants<DialogItemControll>()
.Cast<DialogItemControll>()
.Single();
var dialogItemControl=button.subjects()
.Cast()
.Single();
查询的第一部分查找给定类型的被查询元素的所有后代(您也可以使用Linq to VisualTree查找子元素、对等元素等),第二部分将返回的列表强制转换为给定类型,最后,因为我们知道给定类型只有一个后代,所以可以使用Single()提取单个项
希望这能有所帮助。我可以通过编写:var-button=sender-as-button;var firstStack=button.Parent作为StackPanel;var secondStack=firstStack.Parent作为StackPanel;var thirdStack=secondStack.Parent作为网格;var lastItem=thirdStack.Parent作为DialogItemControll;但是我正在寻找更好的方法来实现这一点。谢谢,你一定会喜欢Linq,现在将它用于sql、excel和xml。。工作完美。谢谢