WPF ListBox按钮所选项目

时间:2009-07-16 20:10:48

标签: c# .net wpf listbox

我有一个带有一些文本块和一个按钮的列表框 - 在按钮的代码后面,它调用一个传递当前所选列表框项的方法,这非常有用。问题是,当我选择一个项目,然后单击另一个项目上的按钮时,它不会更新“SelectedItem”属性 - 是否有一种方法Xaml或C#,我可以强制按钮单击以选择父ListBoxItem?< / p>

的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 个答案:

答案 0 :(得分:22)

var curItem = ((ListBoxItem)myListBox.ContainerFromElement((Button)sender)).Content;

答案 1 :(得分:4)

单击一个Button时,它会将e.Handled设置为true,从而导致路由事件遍历停止。

您可以向Button添加处理程序,再次引发路由事件,或者找到ListBoxItem类型的可视祖先,并将其IsSelected属性设置为true。

修改

像这样的扩展方法:

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))