Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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如何解决相同的ElementName问题?_C#_Wpf_Commandparameter_Elementname - Fatal编程技术网

C# WPF如何解决相同的ElementName问题?

C# WPF如何解决相同的ElementName问题?,c#,wpf,commandparameter,elementname,C#,Wpf,Commandparameter,Elementname,假设以下HierarchycalDataTemplate显示2个数据集。 然后有两个具有相同x:Name=“MyListBoxName”的列表框。 WPF如何知道作为CommandParameter传递哪个参数 <HierarchicalDataTemplate ItemsSource="{Binding SubNodes}"> <ListBox x:Name="MyListBoxName"> <i:Interaction.Triggers&

假设以下HierarchycalDataTemplate显示2个数据集。 然后有两个具有相同x:Name=“MyListBoxName”的列表框。 WPF如何知道作为CommandParameter传递哪个参数

<HierarchicalDataTemplate ItemsSource="{Binding SubNodes}">
      <ListBox x:Name="MyListBoxName">
      <i:Interaction.Triggers>
       <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=DataContext.SelectedCommand}" CommandParameter="{Binding ElementName=MyListBoxName}"/>
       </i:EventTrigger>
      </i:Interaction.Triggers>
    </HierarchicalDataTemplate>


谢谢:)

它不起作用,所以我认为这不起作用

为什么要将UI元素作为参数传递给datacontext?
我猜你可以做你想做的事,但你只需要换一种方式来思考。

事实并非如此,因此我不相信这是可行的

为什么要将UI元素作为参数传递给datacontext?
我猜你可以做你想做的事情,但只需要换一种方式来思考。

WPF在解析名称时使用类似于冒泡事件的东西

由于它在其直接父模板中找到名为
MyListBoxName
的元素,因此将使用该元素

如果没有,它将尝试在父模板的父模板中找到它,以此类推


这就是为什么在您的例子中,它可以完美地编译和工作,但如果您尝试在同一模板中添加重复的名称,它就会失败。

WPF在解析名称时使用类似于冒泡事件的东西

由于它在其直接父模板中找到名为
MyListBoxName
的元素,因此将使用该元素

如果没有,它将尝试在父模板的父模板中找到它,以此类推

这就是为什么在您的例子中,它可以完美地编译和工作,但如果您尝试在WPF使用的同一模板中添加重复的名称,并将其添加到可能发生冲突的分区名称中,它就会失败

正如可视化树包含元素树一样,也有一个从可视化树构建的名称范围树,它定义了命名元素的层次结构。它可以防止同一范围内的冲突,并允许在嵌套范围内搜索命名元素

WPF中的样式和模板提供了以简单的方式重用和重新应用内容的能力。但是,样式和模板也可能包含在模板级别定义了XAML名称的元素。同一个模板可能在一个页面中使用多次。因此,样式和模板都定义了自己的XAML名称范围,与应用样式或模板的对象树中的任何位置无关

整篇文章深入探讨了如何在常规名称作用域和嵌套作用域(包括样式和模板中的作用域)中解析名称的细节。

WPF用于在可能发生冲突的位置对名称进行分区

正如可视化树包含元素树一样,也有一个从可视化树构建的名称范围树,它定义了命名元素的层次结构。它可以防止同一范围内的冲突,并允许在嵌套范围内搜索命名元素

WPF中的样式和模板提供了以简单的方式重用和重新应用内容的能力。但是,样式和模板也可能包含在模板级别定义了XAML名称的元素。同一个模板可能在一个页面中使用多次。因此,样式和模板都定义了自己的XAML名称范围,与应用样式或模板的对象树中的任何位置无关


整篇文章深入探讨了如何在常规名称作用域和嵌套作用域(包括样式和模板中的作用域)中解析名称的细节。

这确实让我感到惊讶:-D我试图完成一个场景,其中我有多个列表框。但只有一个应该有一个选定的项目。这很有趣。我一直避免使用您发布的代码,因为它似乎不起作用。下一次面对这种情况时,我将不得不尝试它。我甚至感到惊讶:-D我正在尝试完成一个场景,其中我有多个列表框。但只有一个应该有一个选定的项目。这很有趣。我一直避免使用您发布的代码,因为它似乎不起作用。下次我遇到这种情况时,我必须尝试一下。