Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中获取TreeViewItem_C#_Wpf - Fatal编程技术网

C# 在WPF中获取TreeViewItem

C# 在WPF中获取TreeViewItem,c#,wpf,C#,Wpf,当我单击BTNAddProvince时,如何获取Treeviewitem 在我的例子中,button的父节点是stackpanel,而我无法获取stackpanel的父节点(这是获取节点的好方法吗?) 有什么想法吗 <HierarchicalDataTemplate DataType="{x:Type MyService:Region}" ItemsSource="{Binding Path=ListOfProvince

当我单击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>


我建议您在树状视图中使用基于MVVM的设计(有关如何实现这一点的精彩文章,请参阅)。然后将按钮绑定到ViewModel的命令。这样,您就可以在项目的ViewModel上调用该命令,然后根据项目执行特定的逻辑。

我建议您在TreeView中使用基于MVVM的设计(请参阅一篇很好的文章如何做到这一点)。然后将按钮绑定到ViewModel的命令。这样,您可以在项目的ViewModel上调用命令,然后根据项目执行特定的逻辑。

您可以通过以下方式获得TreeView项目:

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;
}
public New()
{
    
//设计器需要此调用。
初始化组件();
    
_Items.Add(新公司{Name=“Company1”,NumberOfHotels=5});
_Items.Add(新公司{Name=“Company2”,NumberOfHotels=15});
_Items.Add(新公司{Name=“Company3”,NumberOfHotels=30});
    
        
tviitems.ItemsSource=\u项目;
}
私有无效BTNAddProvince_单击(System.Object sender,System.Windows.RoutedEventTargets e)
{
    
按钮按钮=发送器为按钮;
如果(按钮==null)返回
        
TreeViewItem TreeViewItem=GetVisualParent(按钮);
}
公共静态T GetVisualParent(可视引用Visual),其中T:Visual
{
    
视觉父项=参考视觉;
    
while(parent!=null&&!object.ReferenceEquals(parent.GetType,typeof(T))){
parent=visualtreeheloper.GetParent(parent)作为可视对象;
    }
    
var parent1=visualtreeheloper.GetParent(referencedvisical);
    
        
将父对象返回为T;
}

您可以通过以下方式获取TreeView项目:

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;
}
public New()
{
    
//设计器需要此调用。
初始化组件();
    
_Items.Add(新公司{Name=“Company1”,NumberOfHotels=5});
_Items.Add(新公司{Name=“Company2”,NumberOfHotels=15});
_Items.Add(新公司{Name=“Company3”,NumberOfHotels=30});
    
        
tviitems.ItemsSource=\u项目;
}
私有无效BTNAddProvince_单击(System.Object sender,System.Windows.RoutedEventTargets e)
{
    
按钮按钮=发送方作为按钮;
如果(按钮==null)返回
        
TreeViewItem TreeViewItem=GetVisualParent(按钮);
}
公共静态T GetVisualParent(可视引用Visual),其中T:Visual
{
    
视觉父项=参考视觉;
    
while(parent!=null&&!object.ReferenceEquals(parent.GetType,typeof(T))){
parent=visualtreeheloper.GetParent(parent)作为可视对象;
    }
    
var parent1=visualtreeheloper.GetParent(referencedvisical);
    
        
将父对象返回为T;
}

!object.ReferenceEquals(parent.GetType,typeof(T))!object.ReferenceEquals(parent.GetType,typeof(T))+1表示treeView.ItemContainerGenerator.ContainerFromItem(p),这正是我从绑定数据项获取treeView.ItemContainerGenerator.ContainerFromItem(p)所需的,谢谢。+1表示treeView.ItemContainerGenerator.ContainerFromItem(p),这正是我从绑定数据项获取treeView所需的,谢谢。