2012-12-10 26 views
0

我正在使用Silverlight 5,并且在一个视图中我有一个按钮,单击它时会加载特定的状态。这是使用做一个EventTrigger和GoToStateAction标记,像这样:在DataGridTemplateColumn中使用EventTriggers

<Button x:Name="..." Content="..."> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <ei:GoToStateAction StateName="MyState"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</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?还是我需要使用替代语法来声明它们?

感谢

回答

0

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

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

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