如何访问网格内的元素?

时间:2017-11-15 17:24:00

标签: c# wpf grid datatemplate

我有一个包含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)
        {

        }

1 个答案:

答案 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);
}