これは XAML コードです。
<toolkit:AutoCompleteBox x:Name="newTaskNameTextBox"
ItemsSource="{StaticResource BankNamesList}" />
ItemSource
この属性をnewTaskNameTextBox
プログラムで C#に割り当てる方法は?
これは 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
。これには、論理ツリーを検索するという利点があります (ソース リンク)。
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"]);