[英]Getting TreeViewItem in WPF
当我单击BTNAddProvince时如何获取Treeviewitem?
在我的情况下,button的父级是stackpanel,而我无法获得stackpanel的父级(这是获取节点的好方法吗?)。
有任何想法吗 ?
<HierarchicalDataTemplate DataType="{x:Type MyService:Region}"
ItemsSource="{Binding Path=ListOfProvinces}">
<StackPanel Orientation="Horizontal">
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/>
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" H:"/>
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=NumberOfHotels}"/>
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" "/>
<Button Name="BTNAddProvince" Height="20" Content="+" Click="BTNAddProvince_Click"></Button>
</StackPanel>
</HierarchicalDataTemplate>
我建议您为TreeView使用基于MVVM的设计(有关如何执行此操作的出色文章,请参见http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx )。 然后将您的按钮绑定到ViewModel的命令。 这样,您将在项目的ViewModel上调用命令,然后可以在其中基于项目执行特定的逻辑。
您可以通过以下方式获取TreeViewItem:
public New()
{
// This call is required by the designer.
InitializeComponent();
_Items.Add(new Company { Name = "Company1", NumberOfHotels = 5 });
_Items.Add(new Company { Name = "Company2", NumberOfHotels = 15 });
_Items.Add(new Company { Name = "Company3", NumberOfHotels = 30 });
tvItems.ItemsSource = _Items;
}
private void BTNAddProvince_Click(System.Object sender, System.Windows.RoutedEventArgs e)
{
Button button = sender as Button;
if (button == null) return;
TreeViewItem treeViewItem = GetVisualParent<TreeViewItem>(button);
}
public static T GetVisualParent<T>(Visual referencedVisual) where T : Visual
{
Visual parent = referencedVisual;
while (parent != null && !object.ReferenceEquals(parent.GetType, typeof(T))) {
parent = VisualTreeHelper.GetParent(parent) as Visual;
}
var parent1 = VisualTreeHelper.GetParent(referencedVisual);
return parent as T;
}
private void BTNAddProvince_Click(System.Object sender, System.Windows.RoutedEventArgs e)
{
Button button = sender as Button;
Province p = button.DataContext as Province;
TreeViewItem item = treeView.ItemContainerGenerator.ContainerFromItem(p) as TreeViewItem;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.