0

問題

このコードの一部を使用して、を押したときにListBoxItemを含むのプロパティ (より具体的には、そのインデックス) にアクセスしたいと考えています。の親 ( である)Buttonを取得し、それからビジュアル ツリーを上っていく必要があると考えましたが、非常に重要な 2 つのことを知りません。それが本当に私の問題を解決するかどうかでもありません。ButtonStackPanelTemplatedParent

XAML

<ListBox x:Name="myListBox"  Foreground="Black" HorizontalAlignment="Left" Height="101"     Margin="237,312,0,0" VerticalAlignment="Top" Width="420">
    <ListBox.ItemTemplate>
        <!--src is the alias I gave to the xmlns that gives me access to the    assembly on which I'm working-->
        <DataTemplate DataType="{x:Type src:Items}">
             <DataTemplate.Resources>
                  <Style TargetType="Label">
                      <Setter Property="Foreground" Value="Black"/>
                      <Setter Property="FontFamily" Value="Tahoma"/>
                  </Style>
              </DataTemplate.Resources>
              <StackPanel Orientation="Horizontal">
              <!--Property1 to Property3 are defined in the Items type-->
                  <Label Content="{Binding Path=Property1}" Width="30"  MaxWidth="30"/>
                  <Label Content="{Binding Path=Property2}" Width="100" MaxWidth="100"/>
                  <Label Content="{Binding Path=Property3}" Width="250" MaxWidth="250"/>
                  <Button Content="X" Width="30" MaxWidth="30" Click="RemoveItemFromList"/>
              </StackPanel>
        </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

Cシャープ

正常に動作する私のコードの一部

//Somewhere in my code
ObservableCollection<Items> myStuff = createListOfItems();
myListBox.DataContext = myStuff;
myListBox.setBinding(ItemsControl.ItemsSourceProperty, new Binding());

私が答えかもしれないと思ったもの(うまくいかない)

private void RemoveItemFromList(object sender, RoutedEventArgs e)
{
    int index = (((sender as Button).Parent as StackPanel).TemplatedParent as ListBoxItem).IsSelected = true;
    myStuff.RemoveAt(myListBox.SelectedIndex); 
}
4

1 に答える 1

1

ItemsControlには、 と呼ばれる使用可能なユーティリティ メソッドがありますContainerFromElement。アイテム コンテナーのビジュアル サブツリーから要素を渡すと、次のようなコンテナーが提供されますListBoxItem

var container = ItemsControl.ContainerFromElement(myListBox, sender as UIElement)
                as ListBoxItem;
于 2014-11-10T15:59:41.347 に答える