0

私は Silverlight 5 を使用しています。ビューには、クリックすると特定の状態をロードするボタンがあります。これは、次のように EventTrigger と GoToStateAction マークアップを使用して行われます。

<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 を含めることはできませんか? または、別の構文を使用して宣言する必要がありますか?

ありがとう

4

1 に答える 1

0

GoToStateActionリファレンスは、ターゲットが指定されていない場合、ビジュアル ツリーを上って行き、状態を定義する最初の要素に状態の変更を適用すると述べています2 番目のケースでは、DataGrid ビジュアル ツリーの一部の要素 (セル、行など) がユーザー コントロールの前に考慮される可能性があるため、これまでに見た動作と考えられます。

Silverlight 5 を使用しているため、UserControl の型の祖先を参照する相対ソースを持つバインディングを使用して、アクションのTargetObjectプロパティを目的のコントロールに設定することができます。

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