Silverlight ItemsControl行为:我如何获得我点击的项目?

Not*_*ter 4 c# silverlight behavior itemscontrol

我正在为ItemsControl创建一个行为,目的是选择我点击的项目(并将其添加到所选项目列表中).

因此很容易获得所有项目:

hours = AssociatedObject.ItemsSource as List<Hour>;
Run Code Online (Sandbox Code Playgroud)

当然我可以写小时[0] .Selected = true;

但后来我有一个鼠标事件,我尝试写这样的东西:

void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        hour = sender as Hour;
    }
Run Code Online (Sandbox Code Playgroud)

问题是,它不像我预期的那样工作......发件人不是一个小时,它是一个ItemsControl.

而且我没有迹象表明点击了哪个小时.那我该怎么做才能得到这个小时?

编辑 我的代码的工作原理如下:有一个ItemsControl绑定到Days列表.每天都有一个小时列表.并且为了表示,有一个内部ItemControl绑定到(day.)小时.并代表每个小时,有一个边界.

看起来像这样:

 <ItemsControl x:Name="daysPanel" Grid.Column="1" ItemsSource="{Binding Days}">
       <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl x:Name="dayHours" ItemsSource="{Binding Hours}" Grid.Row="1">
                     <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                  <Border Name="dayHourBorder" Tag="{Binding}" Height="30" BorderBrush="#B0B6BE" Width="193" BorderThickness="1,0,1,1" Background="{Binding Path=Selected, Converter={StaticResource boolToColorConverter}}" >
Run Code Online (Sandbox Code Playgroud)

Not*_*ter 8

感谢大家试图提供帮助,但我找到了正确的方法.我知道必须有简单的方法来获取被点击的UI元素,只需要一个!

而且有!而不是与发件人合作,你只需要:e.OriginalSource

让我成为边界(以及与之相关的小时).所以它就像"简单"一样:

(e.OriginalSource as Border).DataContext as Hour
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的提示!如果你有多个嵌套在Border中的元素,那么应该使用它:( e.OriginalSource as FrameworkElement).DataContext as Hour; - 否则在施法时可能会出现问题. (2认同)