[英]How to set ItemsSource property programmatically?
這是XAML代碼;
<toolkit:AutoCompleteBox x:Name="newTaskNameTextBox"
ItemsSource="{StaticResource BankNamesList}" />
如何分配此ItemSource
屬性的newTaskNameTextBox
通過C#編程?
(WPF解決方案)
您應該使用TryFindResource方法。
newTaskNameTextBox.ItemsSource =
(IEnumerable)newTaskNameTextBox.TryFindResource("BankNamesList");
這以與{StaticResource BankNamesList}
相同的方式搜索邏輯樹。
更新:(WP8的解決方案)
聽起來您使用的是WP8 (不包括FindResource
/ TryFindResource
),所以請嘗試以下操作:
newTaskNameTextBox.ItemsSource = (IEnumerable)Resources["BankNamesList"];
更新:(如何實現缺少的TryFindResource)
請注意,上面的代碼要求資源位於后面的代碼所有者(例如,窗口)中。 但是,在某些情況下,資源可能存在於邏輯樹上的另一個父元素中。 例如,您可能正在為自定義用戶控件編寫代碼,但是要查找的資源存在於MainWindow中。 對於這種情況,編寫WPF的TryFindResouces
的基本實現TryFindResouces
,它具有搜索邏輯樹( 源鏈接 )的優點 :
public static class FrameworkElementExtensions
{
public static object TryFindResource(this FrameworkElement element, object resourceKey)
{
var currentElement = element;
while (currentElement != null)
{
var resource = currentElement.Resources[resourceKey];
if (resource != null)
{
return resource;
}
currentElement = currentElement.Parent as FrameworkElement;
}
return Application.Current.Resources[resourceKey];
}
}
/**********************************************************************/
// Or, the recursive version of TryFindResource method as suggested by @Default:
public static object TryFindResource(this FrameworkElement element, object resourceKey)
{
if (element == null)
return Application.Current.Resources[resourceKey];
var resource = element.Resources[resourceKey];
if (resource != null)
{
return resource;
}
return TryFindResource(element.Parent, resourceKey);
}
因此,如果您在名稱空間中包含此FrameworkElementExtensions
類,那么您應該能夠做到這一點(與我最初為WPF給出的代碼相同):
newTaskNameTextBox.ItemsSource =
(IEnumerable)newTaskNameTextBox.TryFindResource("BankNamesList");
如果BankNamesList是窗口資源中的資源,則可以在后面的代碼中執行以下操作:
newTaskNameTextBox.ItemsSource = Resources["BankNamesList"]
嘗試這個:
newTaskNameTextBox.ItemsSource = (IEnumerable)(Application.Current.Resources["BankNamesList"]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.