0
<ControlTemplate TargetType="{x:Type ListBoxItem}">
                                    <StackPanel>
                                        <StackPanel Margin="0,0,28,0" Orientation="Horizontal" Visibility="{Binding IsEditable,Converter={StaticResource BooleanToVisibilityConverter}}">
                                            <TextBlock Foreground="Gray" Text="{Binding DateCreated,Converter={StaticResource DateTimeConverter}}" FontFamily="/Assets/Fonts/Berthold Akzidenz Grotesk BE Regular.ttf" FontSize="16"/>
                                            <TextBlock Text=":" Foreground="Gray"/>
                                            <TextBlock Width="20"/>
                                            <TextBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"  BorderThickness="0" Name="TrainerNoteText" Text="{Binding TrainerNote}" FontFamily="/Assets/Fonts/Berthold Akzidenz Grotesk BE Regular.ttf" Foreground="Black" FontSize="16" TextWrapping="Wrap" KeyUp="EditTrainerNote" Width="400"/>
                                        </StackPanel>
                                    </StackPanel>
                                </ControlTemplate>

上面的控件模板在一个列表视图中。里面的文本框是可编辑的。所以当用户按下回车键时,我需要获取与之关联的当前对象。这个怎么做?

4

2 回答 2

0

DataTemplate您知道,您确实应该在ListBox.ItemTemplate属性不是属性中定义您的项目的外观ListBoxItem.Template。基于链接页面中的示例:

<ListBox Width="400" Margin="10" ItemsSource="{Binding YourCollectionProperty}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Path=TaskName}" />
                <TextBlock Text="{Binding Path=Description}"/>
                <TextBlock Text="{Binding Path=Priority}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Binding一个集合属性指向该ListBox.Items属性时,该属性内的所有 UI 元素DataTemplate都将有权访问该集合中的类型的属性。在此示例中,填充YourCollectionProperty集合的类型具有TaskName,DescriptionPriority属性。您可以将这些属性替换为您的集合属性中的类型。

如果您设置属性来实现INotifyPropertyChanged接口(或使用DependencyProperties,那么 UI 元素中的任何更新都将在视图模型/代码后面的数据对象中自动更新。因此,无需添加KeyDownKeyUp处理程序。有关更多信息,请阅读 MSDN 上的数据绑定概述页面。

于 2013-10-25T09:23:12.423 回答
0

您可以在 ListView 级别收听 KeyDown RoutedEvent。

http://msdn.microsoft.com/en-us/library/system.windows.input.keyboard.keydown.aspx

它是一个附加事件,它的处理程序可以放置在 VisualTree 中的任何位置。

这是一个例子:

<StackPanel TextBox.KeyDown="OnKeyDownHandler">
  <TextBox Width="300" Height="20"/>
</StackPanel>

这是处理程序:

public void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        TextBox tbx = (TextBox)sender;
        tbx.....
    }
}
于 2013-10-25T08:25:03.410 回答