我有一个包含DataTemplate的lsitbox,其中DataTemplate包含一个Grid。我已将MouseDown ClickListener附加到Grid。现在,每当我点击它时,我想获得该Grid的元素。
<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="222"
Margin="28,75,0,0" VerticalAlignment="Top" Width="244" ItemTemplate="
{DynamicResource DataTemplate1}" BorderThickness="5,1">
<ListBox.Resources >
<DataTemplate x:Key="DataTemplate1">
<Grid Width="205" Height="84" MouseDown="ListClickListener">
<Label x:Name="nameLabel" Content="{Binding FullName}"
HorizontalAlignment="Left" Margin="68,0,0,0" VerticalAlignment="Top"
Width="127" Height="31"/>
<Label x:Name="numberLabel" Content="{Binding
PhoneNumber}" HorizontalAlignment="Right" Margin="0,31,10,0"
VerticalAlignment="Top" Width="127" Height="26"/>
<Ellipse x:Name="ellipse" HorizontalAlignment="Left"
Height="60" VerticalAlignment="Top" Width="60">
<Ellipse.Fill>
<ImageBrush ImageSource="{Binding Picture}"
Stretch="UniformToFill"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</DataTemplate>
</ListBox.Resources>
</ListBox>
和.cs中的方法“ListClickListener”如下:
private void ListClickListener(object sender, MouseButtonEventArgs e)
{
}
答案 0 :(得分:0)
如果你想要的只是控件的绑定值,你就不需要触摸控件来做到这一点。事实上,最好不要这样做。您希望能够在DataTemplate中更改或重新排列XAML,而无需担心修复任何其他代码。
您使用某个类的集合填充了ListBox。这是你想要与之互动的课程,而不是任何凌乱的UI内容。这在WPF中很容易。
例如,Label的内容绑定到列表框项的DataContext的FullName属性。将((FrameworkElement)sender).DataContext
投射到列表框中显示的项目类型。让我们说项目类名为MyListBoxItemClass
:
private void ListClickListener(object sender, MouseButtonEventArgs e)
{
var vm = (MyListBoxItemClass)((FrameworkElement)sender).DataContext;
MessageBox.Show("FullName is " + vm.FullName);
}