我ItemsControl绑定到一个列表,MyItems,对象为SomeType。当我单击我的 UI 元素(即省略号)时,我想抓住该SomeType对象。
这不起作用:
public HitTestResultBehavior SomeTypeHitCallback(HitTestResult result)
{
    if (result.VisualHit is Ellipse)
    {
        var ellipse = result.VisualHit as Ellipse;
        // Does not work...
        object item = itemsSource.ItemContainerGenerator.ItemFromContainer(ellipse);
        // item now equals DependencyProperty.UnsetValue
        // Here I want to change the property of the object
        // associated with the Ellipse...
        var o = item as SomeType;
        o.IsSelected = !o.IsSelected;
        return HitTestResultBehavior.Continue;
    }
    return HitTestResultBehavior.Stop;
}
private void Canvas_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var pt = e.GetPosition((UIElement)sender);
    VisualTreeHelper.HitTest(
        (UIElement)sender,
        null,
        new HitTestResultCallback(SomeTypeHitCallback),
        new PointHitTestParameters(pt));
}
这是 XAML:
<ItemsControl x:Name="itemsSource" ItemsSource="{Binding Path=MyItems}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <Canvas ClipToBounds="True" PreviewMouseLeftButtonDown="Canvas_PreviewMouseLeftButtonDown" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <Ellipse x:Name="item" Width="{Binding Width}" Height="{Binding Height}" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
我怎样才能找到SomeType对象?