嗨,我的列表框有问题。当我单击列表框中的项目(文本或图像)时,一切正常,但是当我单击项目行中的空白区域时,项目未被选中但我不知道哪里可能有问题,因为每个行/项目都像网格一样使用图像和文字,我已将标记设置为网格中的绑定,但如果单击文本或图像,则会选择项目。
private void userTapped(object sender, TappedRoutedEventArgs e)
{
var button = sender as Grid;
if (button != null)
{
var subject = MyDatasMessagesUserList.FirstOrDefault(sub => sub == button.Tag);
if (subject != null)
{
IdOfChoosenUser = subject.MessengeFromId;
}
}}
<ListBox x:Name="lbMessagesUsersList" Grid.Column="1" FontSize="13" ItemsSource="{Binding MyDatasMessagesUserList }" Margin="0,0,0,80">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Top" Margin="0,0,0,0" Tapped="userTapped" Tag="{Binding}" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="layoutGraphics/logo120.png" HorizontalAlignment="Left" VerticalAlignment="Top" Width="40" Height="40" Margin="5,5,0,0"></Image>
<TextBlock x:Name="tbMessengerName" Text="{Binding MessengerName}" HorizontalAlignment="Left"
Foreground="#FF02416C"
FontSize="16" Grid.Column="1" Margin="10,0,20,0" VerticalAlignment="Center" MinWidth="120"/>
<Image x:Name="imgMessengerIsOffline"
HorizontalAlignment="Right"
Margin="10,0,20,0" Grid.Column="2" VerticalAlignment="Center" Source="{Binding isUserOnline}" Width="20" Height="20">
</Image>
</Grid>
<Rectangle Fill="#FF6FB7FF" Grid.Row="1" Height="1" Margin="0,0,0,-20">
</Rectangle>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:1)
将网格包裹在ListBoxItem内的DataTemplate中(并在ListBoxItem上设置tap事件)或将网格的背景设置为透明,并且tap事件应该正常工作。
private void userTapped(object sender, TappedRoutedEventArgs e)
{
var button = sender as ListBoxItem;
if (button != null)
{
var subject = MyDatasMessagesUserList.FirstOrDefault(sub => sub == button.Tag);
if (subject != null)
{
IdOfChoosenUser = subject.MessengeFromId;
}
}}
<ListBox x:Name="lbMessagesUsersList" Grid.Column="1" FontSize="13" ItemsSource="{Binding MyDatasMessagesUserList }" Margin="0,0,0,80">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem Tapped="userTapped" Tag="{Binding}">
<Grid VerticalAlignment="Top" Margin="8,10" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="layoutGraphics/logo120.png" HorizontalAlignment="Left" VerticalAlignment="Top" Width="40" Height="40" Margin="5,5,0,0"></Image>
<TextBlock x:Name="tbMessengerName" Text="{Binding MessengerName}" HorizontalAlignment="Left"
Foreground="#FF02416C"
FontSize="16" Grid.Column="1" Margin="10,0,20,0" VerticalAlignment="Center" MinWidth="120"/>
<Image x:Name="imgMessengerIsOffline"
HorizontalAlignment="Right"
Margin="10,0,20,0" Grid.Column="2" VerticalAlignment="Center" Source="{Binding isUserOnline}" Width="20" Height="20">
</Image>
</Grid>
<Rectangle Fill="#FF6FB7FF" Grid.Row="1" Height="1" Margin="0,0,0,-20">
</Rectangle>
</Grid>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:0)
我认为您的问题是因为Grid
中有3列,但您只使用其中的两列。因此,没有对象可供您单击,因此不会选择该项目。我猜您可以通过
1)删除Grid
的第三列。
或
2)将Rectangle
(或任何其他控件)添加到Grid
的第三列。