2014-09-10 75 views
0

的名稱屬性所以,我有我的XAML:綁定到一個網格WPF

<Grid 
     Name="{x:Static enums:DropTargetNames.ItemsGridView}" /> 

所以enums是命名空間中,DropTargetNames是一個靜態類和MasterProgramGridView是一個靜態的字符串。這個想法是在編碼時防止錯誤類型,因爲它們在多個地方使用。

不幸的是,c#WPF不允許這樣做。那麼是否有另一個屬性可以像這樣設置用作網格的標識符?

我的代碼標識網格是這樣的:

var grid = dropInfo.Target as Grid; 
var name = grid.Name; 

switch (name) { 

} 

在您使用DropTargetNames.ItemsGridView或其他靜態字符串的開關。

+0

如果您正在重複使用它們,也許重新使用整個控件而不僅僅是一個名稱會有意義嗎?您可以創建一個模板/樣式並重用它。我相信這樣做更有意義.. – walther 2014-09-10 10:21:47

+0

我寧願只能應用一個名稱,其他網格視圖可能需要這個名稱,如果他們已經在使用模板和樣式,我不想將它們搞亂。只是想添加一個名字 – 2014-09-10 10:23:40

+3

也許你可以使用'Tag'屬性,它用來存儲元素的自定義信息。 – 2014-09-10 10:35:28

回答

0

所以最後,我去了關於標籤的評論。這是正是我需要的:

<Grid Tag="{x:Static enums:DropTargetNames.ItemsGridView}"> 

</Grid> 

C#:

var grid = dropInfo.Target as Grid; 

switch (grid.Tag as string) 
{ 

} 

都好!

1

您可以嘗試通過AttachedProperty間接設置它,讓我們在一個名爲ABC

類說讓說的附加屬性聲明如下

public static readonly DependencyProperty DynamicNameProperty = DependencyProperty.RegisterAttached(
     "DynamicName", typeof(object), typeof(FrameworkElement), new PropertyMetadata(default(object), PropertyChangedCallback)); 

    private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs) 
    { 
     FrameworkElement frameworkElement = (FrameworkElement)dependencyObject; 
     if (eventArgs.NewValue != null) 
     { 
      frameworkElement.Name = eventArgs.NewValue.ToString(); 
     } 
    } 

在XAML中你可以設置喜歡的名字這

<Grid 
    prefix:ABC:DynamicName="{x:Static enums:DropTargetNames.ItemsGridView}" /> 
+0

這似乎是一個有趣的解決方案。它似乎有點多,如果標籤解決方案失敗,我會用這個。謝謝 – 2014-09-10 10:44:22