0

テンプレートとしてハイパーリンクを持つテンプレート列を持つDataGridがあります

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock>
            <Hyperlink Command="{Binding Path=OpenCommand}">
                <TextBlock Text="{Binding Path=Description}" />
            </Hyperlink>
        </TextBlock>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

DataGridには、選択した行のコマンドを含むコンテキストメニューもあります。ユーザーがハイパーリンク列以外の列の行を右クリックすると、その行が選択され、コンテキストメニューが表示されます。私が抱えている問題は、ユーザーがハイパーリンクを右クリックしたときに、その行のコマンドを表示するために、その行が自動的に選択されないことです。

質問:ハイパーリンクでマウスの右クリックを無視し、データグリッドにイベントを処理させて、他の列と同じように行を選択するにはどうすればよいですか?

4

1 に答える 1

2

この動作の原因はわかりませんが、確かに迷惑です。

ハイパーリンクまたはDataGridに対して何かを実行して、何らかの方法でそれを機能させることができるかどうかはわかりませんが、そうではないと思います。

幸いなことに、かなりうまく機能する回避策があります。

MouseRightButtonDownDataGridRowsでイベントをサブスクライブし、IsSelectedイベントが発生したときにプロパティをtrueに設定できます。そうすれば、をクリックしても正しい行が選択されますHyperlink

次のように、XAMLにイベントハンドラーを追加します。

<DataGrid.Resources>
    <Style TargetType="DataGridRow">
        <EventSetter Event="MouseRightButtonDown" Handler="DataGridRow_MouseRightButtonDown" />
    </Style>
</DataGrid.Resources>

..そしてコードビハインドで選択を設定します:

protected void DataGridRow_MouseRightButtonDown(object sender, EventArgs e)
{
    var row = (DataGridRow)sender;
    row.IsSelected = true;
}
于 2012-11-01T13:36:34.073 に答える