如何访问网格内的元素?
how to access elements inside of grid?
我有一个包含 DataTemplate 的 lsitbox,并且在该 DataTemplate 中包含一个 Grid。我已将 MouseDown ClickListener 附加到网格。现在我想在每次单击时获取该网格的元素。
<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)
{
}
如果您只需要控件的绑定值,则无需触摸控件即可。事实上,最好不要这样做。您希望能够更改或重新排列 DataTemplate 中的 XAML,而不必担心修复任何其他代码。
您使用一些 class 的集合填充了列表框。这是您想要与之互动的 class,而不是任何混乱的 UI 东西。这在 WPF 中很容易。
例如,标签的内容绑定到列表框项的 DataContext 的全名 属性。将 ((FrameworkElement)sender).DataContext
转换为列表框中显示的项目类型。假设项目 class 被命名为 MyListBoxItemClass
:
private void ListClickListener(object sender, MouseButtonEventArgs e)
{
var vm = (MyListBoxItemClass)((FrameworkElement)sender).DataContext;
MessageBox.Show("FullName is " + vm.FullName);
}
我有一个包含 DataTemplate 的 lsitbox,并且在该 DataTemplate 中包含一个 Grid。我已将 MouseDown ClickListener 附加到网格。现在我想在每次单击时获取该网格的元素。
<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)
{
}
如果您只需要控件的绑定值,则无需触摸控件即可。事实上,最好不要这样做。您希望能够更改或重新排列 DataTemplate 中的 XAML,而不必担心修复任何其他代码。
您使用一些 class 的集合填充了列表框。这是您想要与之互动的 class,而不是任何混乱的 UI 东西。这在 WPF 中很容易。
例如,标签的内容绑定到列表框项的 DataContext 的全名 属性。将 ((FrameworkElement)sender).DataContext
转换为列表框中显示的项目类型。假设项目 class 被命名为 MyListBoxItemClass
:
private void ListClickListener(object sender, MouseButtonEventArgs e)
{
var vm = (MyListBoxItemClass)((FrameworkElement)sender).DataContext;
MessageBox.Show("FullName is " + vm.FullName);
}