2011-04-15 51 views
0

如果我在Microsoft Blend 4中添加控件但沒有將此控件的名稱設置爲此控件,並且我想爲它設置名稱並在c#中使用它? 例如我用混​​合在我的佈局,但沒有給它一個名字 我想用C#來給它一個名稱,而不x:Name=""在XAML使用c#在wpf中重命名控件#

+0

可以是具體的,並添加更多的細節,你的問題? – 2011-04-15 11:59:58

+0

你有沒有任何令人信服的理由不給控制名稱? – Gorgen 2011-04-15 12:18:43

+0

是的,我添加了可擴展的控件我從codeproject中獲得它,並且只有當它的所有子項都沒有名稱時我纔可以編譯 – kartal 2011-04-15 12:25:31

回答

0

首先,爲什麼在世界上,你會想這樣做,添加的按鈕?

如果您未設置名稱,則您無法輕鬆訪問該控件。但是,您可以通過與其他控件或傳遞引用的事件(例如加載的事件)的關係來訪問控件。

例如

private void Menu_Loaded(object sender, RoutedEventArgs e) 
{ 
    (sender as Menu).Name = "MainMenu"; 
} 

或者如果控制是另一個控件的子項:

(ControlStack.Children[0] as Menu).Name = "MainMenu"; 

但我不能想到的,可以通過實現什麼有用的東西......

你可能只是想獲取可以輕鬆存儲在類成員中的對象的引用。在某些情況下,您還可以使用資源來分割您的XAML。

例如

<local:SomethingIWouldLikeToReference x:Key="SomethingIWouldLikeToReference"/> 
<local:UserControl x:Name="userControl"> 
    <Stuff> 
     <MoreStuff Content="{StaticResource SomethingIWouldLikeToReference}"/> 
    </Stuff> 
</local:UserControl> 
public MainWindow() 
{ 
    InitializeComponent(); 
    MyReference = FindResource("SomethingIWouldLikeToReference") as SomethingIWouldLikeToReference; 
} 
1

在你的地方我會給LogicalTreeHelper.GetChildren(本)的機會。它將一組孩子返回給Window(這是Window的句柄)參考MSDN
從那裏你可以嘗試找到你的控件。

但是我認爲試着重寫控件(或者查找另一個組件)是很容易的,所以你可以在孩子身上有名字。那是你一開始就遇到的問題。

希望它可以幫助
Gorgen

0

例如,如果我有ListView控件,我想用它來添加項目和刪除項目 讓私人ListView和初始化

ListView temp_control_List = new ListView() 

然後進行加載事件處理程序從混合所以它會在VS然後

private void ListView_Loaded(object sender, System.Windows.RoutedEventArgs e) 
     { 
      temp_control_List = sender as ListView; 
     } 

現在,您可以添加和刪除和從列表視圖控制從temp_control_List