Visual Studio 2008 및 NET Framework 3.5 SP1에 MVVM WPF 앱이 있습니다. 다른 컨트롤 중에서도이 응용 프로그램에는 DataGrid와 버튼이 있습니다.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의 다른 항목으로 이동할 수 있습니다.
그래서 단추의 속성을 FocusManager.FocusedElement로 설정하려고 시도했지만 작동하지 않습니다. 재산의 경로를 설정하지 않고, 첫 번째 시도에서
FocusManager.FocusedElement="{Binding ElementName=myDataGrid}"
:
FocusManager.FocusedElement="{Binding ElementName=myDataGrid}"
때 나는 화살표 키를 최대에서의 아래를 클릭 나는 또한 경로를 지정하지 않고 그대로 설정 시도 (단추를 클릭 한 후) 키보드를 누르면 UI의 다른 컨트롤 인 DataGrid에서 현재 선택된 항목이 아닌 포커스가 변경됩니다. 재산의 경로 설정 두 번째 시도에서 : 단순히 아무것도하지 않는 FocusManager.FocusedElement="{Binding ElementName=myDataGrid, Path=SelectedItem}"
를, 어느 DataGrid를에서나 다른 컨트롤에서 현재 선택한 항목에없는 초점을 맞 춥니 다. here을 말했듯이
또한 내가 연결된 동작을 시도했지만 그것은 작동하지 않습니다 :<Button Grid.Column="1" Command="{Binding CalculateCommand}" classes:EventFocusAttachment.ElementToFocus="{Binding ElementName=myDataGrid}" HorizontalAlignment="Right">
또 다른 시도 :
그것은 두 번째 키 클릭에서 작동, 첫 번째 클릭은 무시됩니다.
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