Visual Studio 2008およびNET Framework 3.5 SP1にはMVVM WPFアプリケーションがあります。他のコントロールの中でも、このアプリケーションにはデータグリッドとボタンがあります。WPF MVVM:ボタンをクリックすると、Datagridの現在選択されている項目にフォーカスを設定します。
ボタンは:ボタンは、私がキーボードにアップ/ダウンの矢印キーをクリックしたときにクリックされたら
<Button Grid.Column="1" Command="{Binding CalculateCommand}" FocusManager.FocusedElement="{Binding ElementName=myDataGrid}" HorizontalAlignment="Right">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myDataGrid, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Image VerticalAlignment="Center" Source="/MyWPFApp;component/Images/Calculate.png"></Image>
<TextBlock VerticalAlignment="Center">Calculate</TextBlock>
</StackPanel>
</Button>
私は何をしようとしていると、DataGrid内の現在選択されている項目にフォーカスを設定することです私は、DataGridの他の項目に移動することができます。
私はFocusManager.FocusedElementボタンのプロパティを設定しようとしましたが、機能しません。プロパティでパスを設定せずに、最初の試みで
FocusManager.FocusedElement="{Binding ElementName=myDataGrid}"
:
FocusManager.FocusedElement="{Binding ElementName=myDataGrid}"
は、ときに私は矢印キーアップ中のダウンをクリックし、私もパスを指定せずにあるように設定しようとしています(ボタンをクリックした後の)キーボードでは、フォーカスは、データグリッド内の現在選択されている項目ではないUI内の別のコントロールに変更されます。プロパティでのパスの設定第二の試みで
、:それは単に何もしない
FocusManager.FocusedElement="{Binding ElementName=myDataGrid, Path=SelectedItem}"
を、どちらもデータグリッド内でも他のコントロールで現在選択されている項目でnoフォーカス。 hereが言ったように
はまた、私は添付の動作を試してみましたが、それは動作していない:
<Button Grid.Column="1" Command="{Binding CalculateCommand}" classes:EventFocusAttachment.ElementToFocus="{Binding ElementName=myDataGrid}" HorizontalAlignment="Right">
別の試み:
をそれが最初のクリックが無視され、第2の鍵をクリックし、上で動作します。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (myDataGrid.SelectedIndex > -1)
{
var selectedRow = (Microsoft.Windows.Controls.DataGridRow)myDataGrid.ItemContainerGenerator.ContainerFromIndex(myDataGrid.SelectedIndex);
FocusManager.SetIsFocusScope(selectedRow, true);
FocusManager.SetFocusedElement(selectedRow, selectedRow);
}
}
@Evkソリューションは完全に動作します。
私があなただったら、 'Button.Click'イベントのグリッドに焦点を合わせました。これは、ビューモデルに関係なく完全に表示されるためです。何らかの理由でコードビハインドを嫌う人は、接続されたプロパティやビヘイビアで同じことをすることができます。 – Evk
@Evk投稿の私の最後の行を見て、ただ更新しました。私は試して、行動を添付し、それは動作していません。 – user1624552
これは、 'myDataGrid.Focus()'内部の単純なButton.Clickハンドラも機能しないことを意味していますか? – Evk