1

ItemsSource ="{DynamicResourcetestResource}"のComboBoxがあります。testResourceは、C#コードで設定したアプリケーションリソースです。

私が気付いたのは、アプリケーションを作成する前にWindowをロードすると、リソースがComboBoxによってロードされないことです。

Window window = (Window)LoadXaml("Window1.xaml");
Application app = new Application();

このコードは機能します

Application app = new Application();
Window window = (Window)LoadXaml("Window1.xaml");

また、アプリケーションの前にウィンドウを作成した場合でも、ボタンクリックハンドラーで後でリソースをロードできます。

誰かが説明できますか、何が起こりますか?なぜ順序が重要なのですか?

Window1.xaml:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <ComboBox ItemsSource="{DynamicResource testResource}" SelectedIndex="0"></ComboBox>
        <Button x:Name='testButton'>Test</Button>
    </StackPanel>
</Window>

C#

class Program
{
    [STAThread]
    public static void Main()
    {
        Window window = (Window)LoadXaml("Window1.xaml");
        Application app = new Application();
        SetupResource();

        (window.FindName("testButton") as Button).Click += new RoutedEventHandler(testButton_Click);
        window.Show();
        app.Run(window);
    }

    static void testButton_Click(object sender, RoutedEventArgs e)
    {
        SetupResource();
    }

    static void SetupResource()
    {
        List<string> list = new List<string>();
        list.Add("Hola");
        list.Add("Mundo");
        Application.Current.Resources["testResource"] = list;
    }

    static object LoadXaml(string fileName)
    {
        return XamlReader.Load(File.Open(fileName, FileMode.Open));
    }
}
4

1 に答える 1

0

確かではありませんが、のリソースはオブジェクトの作成Application時にのみロードされるため、推測できます。Applicationしたがって、 にアクセスする場合はtestResource、 への呼び出しの後に行う必要がありますnew Application()

于 2009-04-30T17:37:35.930 に答える