设置自动生成的listboxitem的属性

时间:2010-04-03 18:34:39

标签: wpf listbox

我正在尝试设置数据绑定ListBox的自动生成的ListBoxItem的输入绑定。 下面的代码不起作用。编译器抱怨“无法设置Property Setter'InputBindings',因为它没有可访问的set访问器。” 设置InputBindings的正确语法是什么?

    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="ListBoxItem.InputBindings">
                <Setter.Value>
                    <MouseBinding Command="{Binding OpenCommand}" Gesture="LeftDoubleClick"/>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>

PS:发布不适用于Opera 10.51

2 个答案:

答案 0 :(得分:3)

这个确实很棘手。

我找到了两个建议的解决方案,恐怕都不容易实现。我希望它适合你!

答案 1 :(得分:1)

如果你寻找一种较少“Hacky”的方法,你可以简单地处理ListBoxItem的Loaded事件。

        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <EventSetter Event="Loaded" Handler="ListBoxItem_Loaded" />
            </Style>
        </ListBox.ItemContainerStyle>

然后在事件处理程序中添加你的InputBindings。

Private Sub ListBoxItem_Loaded(ByVal sender As System.Object, ByVal e As RoutedEventArgs)
    Dim item = DirectCast(sender, ListBoxItem)
    item.InputBindings.Add(New KeyBinding(UserCommands.EditCommand, Key.Enter, ModifierKeys.None))
    item.InputBindings.Add(New KeyBinding(UserCommands.DeleteCommand, Key.Delete, ModifierKeys.None))
    item.InputBindings.Add(New MouseBinding(UserCommands.EditCommand, New MouseGesture(MouseAction.LeftDoubleClick)))
End Sub

我知道这不是理想的MVVM解决方案,但它是我发现的最佳方式。