【发布时间】:2011-10-26 23:43:22
【问题描述】:
我的问题与此非常相似:(Binding events to buttons in an ItemsControl) 但我没有在那里找到解决方案。 我有一个 ItemsControl,在它的 DataTemplate 中,我有另一个 ItemsControl。外部控件中的项目包含具有某些属性的类,其中一个属性是集合。内部 ItemsControl 源绑定到此集合,内部控件 DataTemplate 内部有一个 Button。
我的问题是,当我为按钮 (.. Click="dummyfunc") 连接一个事件并尝试运行该项目时,我得到一个未处理的 XamlParseException (4004) 并说“无法分配给属性” System.Windows.Controls.Primitives.ButtonBase.Click'" 我在 Xaml 中放置外部 ItemsControl 的页面的 CodeBehind 中声明了我的事件处理程序。它适用于放置在外部控件 DataTemplate 中的按钮。但是在内部控件模板中,我无法连接任何事件。
一件事有效:
<HyperlinkButton Content="x">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="DeleteMe" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
但这只会触发我上面提到的项目中实现的方法(DeleteMe),它有一些属性和一个集合。
但不是这样,我需要用通常的方法处理内部控件中的事件:
public void dummyfunc(object sender, RoutedEventArgs e){...}
(所以我可以获得触发事件的按钮,例如:
sender as HyperinkButton
或
e.OriginalSource as HyperlinkButton
我想问题是事件没有冒泡,我得到了解析异常,因为解析器在实际范围内找不到事件处理程序声明,这显然不是内部控件的 CodeBehind :(
我需要这个的原因,是因为我想在代码中做一些自定义的 UI 逻辑,然后才以某种方式触发 DeleteMe 逻辑。
谢谢, 巴林特
【问题讨论】:
标签: c# silverlight xaml