0

我希望设置 listViewitem 的 Inputbinding ...它应该是 Keyborad 绑定而不是鼠标绑定...

Enter当用户选择一个项目并按下键时,我想在我的视图模型中执行一个函数

ListViewItem 的样式

    <Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type CustomView:PlainView},
                                    ResourceId=ImageViewItem}"           
       TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">

    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="FocusVisualStyle" Value="{StaticResource ListViewItemFocusVisual}" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="Margin" Value="0,0,0,1" />
    <Setter Property="Padding" Value="5,2,5,2" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Focusable" Value="False"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Border x:Name="border"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="2"
                        SnapsToDevicePixels="true">
                    <Grid Margin="2,0,2,0">
                        <Rectangle x:Name="BackgroundGradientOver"
                                   Fill="{DynamicResource MouseOverBrush}"
                                   Opacity="0"
                                   RadiusX="1"
                                   RadiusY="1"
                                   Stroke="{DynamicResource MouseOverBorderBrush}" />
                        <Rectangle x:Name="BackgroundGradientSelectedDisabled"
                                   Fill="{DynamicResource ListItemSelectedBrush}"
                                   Opacity="0"
                                   RadiusX="1"
                                   RadiusY="1"
                                   Stroke="{DynamicResource ListItemSelectedBorderBrush}" />
                        <Rectangle x:Name="BackgroundGradientSelected"
                                   Fill="{DynamicResource PressedBrush}"
                                   Opacity="0"
                                   RadiusX="1"
                                   RadiusY="1"
                                   Stroke="{DynamicResource PressedBorderBrush}"
                                   StrokeThickness="1" />
                        <ContentPresenter x:Name="contentPresenter"
                                      Margin="{TemplateBinding Padding}"
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      Content="{TemplateBinding Content}"
                                      ContentTemplate="{TemplateBinding ContentTemplate}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="{DynamicResource OutsideFontColor}" />
</Style>

我的数据模板

<DataTemplate x:Key="centralTile">
    
    <StackPanel Width="80"
                Height="40"
                KeyboardNavigation.AcceptsReturn="True">
        <StackPanel.InputBindings>
            <KeyBinding Key="Enter" Command="{Binding Path=DataContext.KeyCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}" CommandParameter="{Binding}"></KeyBinding>
        </StackPanel.InputBindings>
        <Grid>              
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Button Command="{Binding Path=DataContext.KeyCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"
                            CommandParameter="{Binding}">
                <TextBlock Text="{Binding Path=Name}" />
            </Button>
            <Image Grid.Column="1" Source="Water lilies.jpg" />
        </Grid>
        <TextBlock HorizontalAlignment="Center"
                   FontSize="13"
                   Text="{Binding Path=Name}" />
    </StackPanel>
</DataTemplate>

我似乎无法找到一种方法来做到这一点......

我在 DataTemplate 中附加了我的 InputBinding 以及 Style Nothing Works

            <KeyBinding Key="Enter" Command="{Binding Path=DataContext.KeyCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}" CommandParameter="{Binding}"></KeyBinding> 
4

1 回答 1

2

您使用的是 4.0 之前的任何 .Net 版本吗?如果是这样,绑定将KeyBinding.Command不起作用KeyBinding.CommandParameter。您将不得不为此使用CommandReferenceAPI。

否则,如果您使用的是 .Net 4.0,那么

  1. 添加KeyBinding到. ListView_InputBindings
  2. 您将必须绑定KeyBinding.CommandParameterSelectedItem.ListView

这样,命令在Enter按键时执行参数,该参数将成为 ListView 的选定项(这是我认为您想要实现的)

于 2011-11-03T11:54:23.523 回答