WPF ListBox Кнопка Выбранный элемент - PullRequest
5 голосов
/ 17 июля 2009

У меня есть список с некоторыми текстовыми блоками и кнопка - в коде кнопки позади нее вызывается метод, передающий текущий выбранный элемент списка, это прекрасно работает. Проблема в том, что когда я выбираю элемент, а затем нажимаю кнопку на другом элементе, он не обновляет свойство «SelectedItem» - есть ли способ Xaml или C #, чтобы я мог принудительно нажать кнопку, чтобы выбрать родительский ListBoxItem?

Xaml

<DataTemplate>
    <Grid>
        <Button x:Name="myButton" Click="myButton_Click" Height="30" Width="30">
            <Image Source="Resources\Image.png" />
        </Button>
        <TextBlock Text="{Binding DataField}"></TextBlock>
    </Grid>
</DataTemplate>

Ответы [ 2 ]

22 голосов
/ 17 июля 2009
var curItem = ((ListBoxItem)myListBox.ContainerFromElement((Button)sender)).Content;
4 голосов
/ 17 июля 2009

При нажатии кнопки она устанавливает значение e.Handled в значение true, что приводит к прекращению прохождения перенаправленного события.

Вы можете добавить обработчик для кнопки, который снова вызывает перенаправленное событие или находит визуального предка типа ListBoxItem и устанавливает для его свойства IsSelected значение true.

EDIT

Метод расширения, подобный этому:

public static DependencyObject FindVisualAncestor(this DependencyObject wpfObject, Predicate<DependencyObject> condition)
{
    while (wpfObject != null)
    {
        if (condition(wpfObject))
        {
            return wpfObject;
        }

        wpfObject = VisualTreeHelper.GetParent(wpfObject);
    }

    return null;
}

Использование:

myButton.FindVisualAncestor((o) => o.GetType() == typeof(ListBoxItem))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...