2009-07-16 87 views
4

我有一些的TextBlocks和按鈕列表框 - 按鈕的代碼隱藏它調用傳遞當前選中的列表框項目的方法,這個偉大的工程。問題是,當我選擇一個項目,然後點擊它不更新「的SelectedItem」屬性的另一項目的按鈕 - 有什麼辦法XAML中或C#,我可以強制點擊一個按鈕來選擇父ListBoxItem的?WPF列表框按鈕來選擇項目

的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> 
+0

因此,有一個按鈕,併爲每個ListBoxItem的一個文本塊?你可以發佈你的XAML,或給我們一個更好的想法如何設置? – Charlie 2009-07-16 20:18:19

回答

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

當點擊一個按鈕,將其設置e.Handled爲true,導致路由事件遍歷停止。

你可以一個處理程序添加到再次引發路由事件,或者發現型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)) 
+0

這樣的方法會是什麼樣子?我如何找到按鈕所在的ListBoxItem的可視祖先? – Nate 2009-07-16 20:26:39

+1

編輯我的答案。 – 2009-07-16 20:36:54