1

您好,我有一个简单的 WPF 窗口,我想在特定的“图像”项目上加载并显示徽标图像。以下代码完美运行,我可以显示徽标。

namespace WPFexample
{
    public partial class MainWindow : Window
    { 
        public MainWindow()
        {
            InitializeComponent();
            var uri = new Uri("pack://application:,,,/Assets/Logo.png");
            LogoImage.Source = new BitmapImage(uri);
        }
    }
}

现在我想创建另一个可以访问 GUI 并从那里显示徽标的类:

namespace WPFexample
{
    public partial class MainWindow : Window
    { 
        public MainWindow()
        {
            InitializeComponent();                
        }
    }

    class MyClass
    {
        private void myCustomDisplay()
        {
            var uri = new Uri("pack://application:,,,/Assets/Logo.png");
            // How can I call the LogoImage.Source from this place??
        }
    }
}

最初我认为我可以做到这一点,但什么也没发生:

class MyClass
{   
    private void myCustomDisplay()
    {
        MainWindow MainWindowClassRef = new MainWindow();
        var uri = new Uri("pack://application:,,,/Assets/Logo.png");
        MainWindowClassRef.LogoImage.Source = new BitmapImage(uri);
    }
}

任何建议为什么我不能显示它?

这也不起作用:

namespace WPFexample
{
    public partial class MainWindow : Window
    { 
        public MainWindow()
        {
            InitializeComponent();                
        }
        public void DisplayInGUI()
        {
            var uri = new Uri("pack://application:,,,/Assets/ITLLogo.png");
            LogoImage.Source = new BitmapImage(uri);            
        }
    }

    class MyClass:MainWindow 
    {
        public void myCustomDisplay()
        {
            DisplayInGUI()
        }
    }
}
4

2 回答 2

1

要访问 MainWindow 实例的成员(例如属性或方法),您可以将MainWindow当前Application实例的属性强制转换为 MainWindow 类。

所以例如调用 MainWindow 的DisplayInGUI()方法

((MainWindow)Application.Current.MainWindow).DisplayInGUI();

您可能希望将实际徽标图像作为参数传递给类似的方法

public partial class MainWindow : Window
{ 
    ...
    public void SetLogoImage(ImageSource image)
    {
        LogoImage.Source = image;
    }
}

并这样称呼它:

((MainWindow)Application.Current.MainWindow).SetLogoImage(
    new BitmapImage(new Uri("pack://application:,,,/Assets/ITLLogo.png")));

编辑:从另一个线程调用该方法,如下所示:

var mainWindow = (MainWindow)Application.Current.MainWindow;
mainWindow.Dispatcher.Invoke(() => mainWindow.DisplayInGUI());
于 2016-06-07T09:29:57.653 回答
0

MyClass 需要有一个名为 LogoImage 的属性或字段。“partial”关键字表示 MainWindow 在其他地方有其类定义的一部分 - 可能在名为 MainWindow.xaml 的类中。我会尝试查看该文件并将其相关部分移动到 MyClass。

从 UIElement 间接派生 MyClass 也可能有所帮助。如果您要求 IDE 在新文件中将其创建为 UserControl,它可能还会为您生成一些占位符 xaml。

于 2016-06-07T08:22:31.387 回答