2016-09-15 26 views
3

我有一個ToggleButton這種結構:如何獲取VisualParent的DataContext?

private void ToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e) 
{ 
    //store settings 
} 

我需要得到的VisualParent的細節,特別是DataContext,我該怎麼辦呢?謝謝。

UPDATE

的XAML結構是這樣的:

<ToggleButton Focusable="False" Width="19" Height="19" IsChecked="{Binding Path = IsFavourite}" 
        Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked"> 
+0

如果可能的話,共享xaml結構。 – Versatile

+0

如果它解決了您的問題,請不要忘記標記爲答案。 – Versatile

回答

1
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext 

而是電網的你可以有不同的控制。所以根據你的xaml結構來替換它。

+0

是否可能獲取代碼返回的對象的Name屬性? – AgainMe

+0

是的。你在尋找網格的名字,即父母嗎? ((發件人爲System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).Name – Versatile

0

更新:

你真的需要它嗎?看看你的XAML,你並沒有在你的ToggleButton中設置DataContext,所以你應該從設置它的值的父母繼承它的值。

參見:DataContext

此依賴項屬性繼承屬性值。如果通過本地值或樣式創建的DataContext沒有其他值的子元素,那麼屬性系統會將該值設置爲指定此值的最近父元素的DataContext值。

無論如何,如果你需要它...

ORIGINAL: ,它假定在XAML中給定的結構是錯誤的任何答案。您始終可以應用更改結構的模板。

話雖如此,您可以使用VisualTreeHelper類(GetParent方法)來導航可視化樹。第一個參數是對被檢查的控件的引用。

所以,從我的頭頂,我想你可以做到以下幾點:

DependencyObject source = sender as DependencyObject; 
if(null != source) { 
    DependencyObject parent = VisualTreeHelper.GetParent(source); 
    FrameworkElement parentElement = parent as FrameworkElement; 
    if(null != parentElement) { 
     object context = parentElement.DataContext; 
    } 
} 

你應該在一個輔助方法不會考慮此因素:

public static FrameworkElement GetParentContext(FrameworkElement element) { 
    object result = null; 
    DependencyObject parent = VisualTreeHelper.GetParent(element); 
    FrameworkElement parentElement = parent as FrameworkElement; 
    if(null != parentElement) { 
     result = parentElement.DataContext; 
    } 
    return result;   
} 

請考慮鑑於XAML結構可能與不同,也許您需要走到樹上,直到找到DataContext不是null的元素。

相關問題