0

我正在使用 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 吗?还是我需要使用替代语法声明它们?

谢谢

4

1 回答 1

0

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

由于您使用的是 Silverlight 5,因此您可以尝试将操作的TargetObject属性设置为您想要的控件,使用具有相对源的绑定,该绑定看起来是 UserControl 类型的祖先。

<ei:GoToStateAction StateName="MyState" TargetObject="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"/> 
于 2012-12-11T15:19:45.837 回答