wpf - 即使左键单击按钮也保留网格焦点状态

标签 wpf datagrid wpfdatagrid

我有一个网格和一个按钮。我希望能够按 down-arrow 选择一行,然后单击按钮,然后按 down-arrow 选择下一行,然后单击按钮。

但是,当我单击按钮时,网格键盘焦点不再位于该行上。

这是一个例子。在这张图片中,我选择了第三行。我想要的行为是:我用鼠标单击 Press Me,然后按一次键盘向下箭头以选择第四行。相反,当我按下 down-arrow 时,顶部的单元格周围有一个框架,当我再次按下它时,顶部的行被选中。

A WPF grid and a button

我应该如何着手创建我需要的行为?我试过编辑后面的代码以明确关注网格,但这没有用。

这是示例的完整代码。

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
<Window.Resources>
        <XmlDataProvider x:Key="DcCharacters">
            <x:XData>
                <Characters xmlns="">
                    <Character HeroName="Catwoman" Identity="Selina Kyle" />
                    <Character HeroName="Batman" Identity="Bruce Wayne" />
                    <Character HeroName="Starman" Identity="Jack Knight" />
                    <Character HeroName="BlueBeetle" Identity="Jaime Reyes" />
                </Characters>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <DataGrid 
            Grid.Row="0" 
            ItemsSource="{Binding Source={StaticResource DcCharacters}, 
            XPath=//Characters/Character}"
            AutoGenerateColumns="False"
                            IsReadOnly="True" 
            >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding XPath=@HeroName}" />
                <DataGridTextColumn Binding="{Binding XPath=@Identity}" />
            </DataGrid.Columns>

        </DataGrid>
        <StackPanel Grid.Row="1">
            <Button Margin="3,3,3,3" Width="Auto" Height="Auto" HorizontalAlignment="Left">_Press Me!</Button>
        </StackPanel>
    </Grid>
</Window>

最佳答案

我认为您正在寻找附加属性 FocusManager.IsFocusScope .

通过在 StackPanel 上将其设置为 true,其中的 Button (或其他控件)在用鼠标单击时不会窃取焦点。它们将像工具栏按钮或菜单一样工作。不过,您仍然可以切换到它们。

这是一个例子,如果你有三个按钮而不是一个,剪切、复制和粘贴

<StackPanel Grid.Row="1"
            FocusManager.IsFocusScope="True" >
    <Button Width="Auto" Height="Auto" HorizontalAlignment="Left">Cut</Button>
    <Button Width="Auto" Height="Auto" HorizontalAlignment="Left">Copy</Button>
    <Button Width="Auto" Height="Auto" HorizontalAlignment="Left">Paste</Button>
</StackPanel>

或者在你的情况下,只是

<StackPanel Grid.Row="1"
            FocusManager.IsFocusScope="True">
    <Button Margin="3,3,3,3" Width="Auto" Height="Auto" HorizontalAlignment="Left">_Press Me!</Button>
</StackPanel>

关于wpf - 即使左键单击按钮也保留网格焦点状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6688901/

相关文章:

wpf - 内部控件和 View 模型之间的 UserControl 属性 "relay";感觉/工作不正常

java - 禁用 DataGrid 的特定列

.net - XAML 语法错误阻碍了设计器,但编译正常

c# - 第一次画面

wpf - 使用 WPF WriteableBitmap.BackBuffer 绘制线条

c# - 从 wpf datagrid 获取隐藏值

c# - 当其他单元格更改时更新 DataGrid 中的单元格

WPF 数据网格绑定(bind)

wpf - 在 DataGrid 控件中自定义自动生成的列

WPF (.net 3.5) ValidationRule , IDataErrorInfo