10

iv'eにはいくつかのitemscontrolがあり、特定の条件が満たされた場合にのみ、PreviewMouseLeftButtonDownイベントのイベントハンドラーをアタッチする必要があります。

iv'eは、データトリガーを使用してコントロールのスタイルを設計しました。そのバインディングを確認し、BorderThicknessプロパティの通常のプロパティセッターを使用して、データトリガーが機能することを確認しました。(します..)

通常のプロパティセッターと同じ方法でイベントセッターを使用してデータトリガーの条件が満たされたときに、データトリガーを適用してイベントハンドラーをアタッチするにはどうすればよいですか?

の線に沿った何か:

     <Style TargetType="{x:Type ItemsControl}">                              
        <Style.Triggers>
            <DataTrigger Binding="{Binding Turn}" Value="True">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>
            </DataTrigger>                            
        </Style.Triggers>
     </Style>

このマークアップは、イベントセッター行で次の例外をスローします。

    'Set property 'System.Windows.EventSetter.Event' threw an exception.' 

内部例外:

       {"Value cannot be null.\r\nParameter name: value"}
4

1 に答える 1

17

残念ながら、備考の下のMSDNドキュメントによると:

Style.SettersのみがEventSetterオブジェクトをサポートすることに注意してください。トリガー(TriggerBaseおよび派生クラス)はEventSetterをサポートしていません

この場合、DataTriggerはTriggerBaseから派生しているため、これを使用してイベントハンドラーを動的に設定することはできません。私が今考えることができる回避策は、の値に基づいてスタイルを動的に切り替えることかもしれませんTurn

于 2012-03-12T22:31:37.850 に答える