2010-09-22 87 views
0

我將X:我的XAML文件中的名稱分配給可觸發MouseDown事件的對象。 在這種情況下,我想再次獲取發件人的x:name-attribute。 我該怎麼做?如何訪問代碼中的x:Name-property?

物體看起來像這樣:

<ModelUIElement3D MouseDown="ModelUIElement3D_MouseDown" x:Name="trololo"> 

回答

5

如果我理解正確你的問題,你可以通過鑄造發送到FrameworkElement訪問Name屬性。

或者,您可以只使用由設計者創建的引用對象,實例名稱與您在x:Name屬性中指定的名稱相同。

以下演示了兩種選擇。

private void ModelUIElement3D_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
    var element = sender as FrameworkElement; 

    if (element != null) 
    { 
     if (element.Name == "trololo") 
     { 
     } 
    } 

    // Or 

    if (sender == trololo) 
    { 
    } 

    } 
+0

它鑄造於FrameworkElement的,然後訪問沒有按似乎沒有工作,但發件人== trololo呢。 謝謝! – Hedge 2010-09-22 20:30:04

+0

@Hedge,轉換爲FrameWorkElement的原因不起作用,因爲ModelUIElement3D繼承鏈不是從FrameworkElement派生的。我必須去檢查一下,但我很高興你有解決方案。 – 2010-09-22 20:57:07

0

基於FrameworkElement的-Name屬性是一個標準的依賴屬性旨在作爲對於x快捷方式:名稱(參見FrameworkElement.Name Property)。但是,許多依賴項對象不是從FrameworkElement派生的,但它們仍然可以使用XAML附加屬性x:Name。確定X:在XAML聲明的對象的運行時名稱不自FrameworkElement派生,你可以檢索使用的GetValue,該對象的附加屬性如下所示:

foreach(var column in gridItem.ColumnDefinitions) 
{ 
    var name = column.GetValue(FrameworkElement.NameProperty) as string; 
    if (name == "IsCheckedColumn") 
     column.Width = show ? CheckUncheckColumn_VisibleWidth : Column_InvisibleWidth; 
    else if (name == "DeleteColumn") 
     column.Width = show ? DeleteColumn_VisibleWidth : Column_InvisibleWidth; 
}