在DataGridTemplateColumn中使用EventTriggers

时间:2012-12-10 20:19:23

标签: silverlight datagridtemplatecolumn

我正在使用Silverlight 5,在视图中我有一个Button,当点击它时,会加载一个特定的状态。这是使用EventTrigger和GoToStateAction标记完成的,如下所示:

<Button x:Name="..." Content="...">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <ei:GoToStateAction StateName="MyState"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

上面的工作很顺利,但是如果我将Button移动到DataGridTemplateColumn中它就不再有效了。具体来说,应用程序编译时没有错误,DataGrid显示列中的按钮,但是当我单击按钮时,状态未转换为。

<data:DataGrid ...>
    <data:DataGrid.Columns>
        <data:DataGridTemplateColumn>
            <data:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button x:Name="..." Content="...">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <ei:GoToStateAction StateName="MyState"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </Button>
                </DataTemplate>
            </data:DataGridTemplateColumn.CellTemplate>
        </data:DataGridTemplateColumn>
    </data:DataGrid.Columns>
</data:DataGrid>

DataGridTemplateColumn中是否不可能有EventTriggers?或者我是否需要使用替代语法声明它们?

由于

1 个答案:

答案 0 :(得分:0)

GoToStateAction引用指出,如果没有指定目标,它将向上走可视树并在它找到的定义状态的第一个元素上应用状态更改。在您的第二种情况下,我相信DataGrid可视化树(单元格,行等)的某些元素可能会在您的用户控制之前被考虑在内,因此您已经看到了这种行为。

由于您使用的是Silverlight 5,因此您可以尝试将操作的TargetObject属性设置为所需的控件,使用relative source查找UserControl类型的祖先的绑定。

<ei:GoToStateAction StateName="MyState" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"/>