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)
感谢大家试图提供帮助,但我找到了正确的方法.我知道必须有简单的方法来获取被点击的UI元素,只需要一个!
而且有!而不是与发件人合作,你只需要:e.OriginalSource
让我成为边界(以及与之相关的小时).所以它就像"简单"一样:
(e.OriginalSource as Border).DataContext as Hour
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3939 次 |
| 最近记录: |