2

これは XAML コードです。

<toolkit:AutoCompleteBox x:Name="newTaskNameTextBox"
                         ItemsSource="{StaticResource BankNamesList}" />

ItemSourceこの属性をnewTaskNameTextBoxプログラムで C#に割り当てる方法は?

4

3 に答える 3

4

(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");
于 2013-09-07T06:27:36.760 に答える
0

BankNamesList がウィンドウのリソースのリソースである場合、コード ビハインドで次のことができます。

newTaskNameTextBox.ItemsSource = Resources["BankNamesList"]
于 2013-09-07T06:20:58.353 に答える
0

これを試して:

newTaskNameTextBox.ItemsSource = (IEnumerable)(Application.Current.Resources["BankNamesList"]);
于 2013-09-07T06:40:03.057 に答える