1

我在 vs2010 中创建 wpf 应用程序。我有一个简单的问题。

我有一个显示图像的类:

private void displayImage()
{
     newImage.Width = 900;
     newImage.Height = 700;

     BitmapImage testim = new BitmapImage();
     testim.BeginInit();
     testim.UriSource = new Uri("E:\\WpfApplication1\\Images\\test.jpg");
     testim.EndInit();

     newImage.Source = testim;
}

XAML:

<ScrollViewer Name="MyScrollViewer" CanContentScroll="True" HorizontalScrollBarVisibility="Visible" Grid.Row="1" Grid.Column="1" >
    <Image Name="newImage" ImageFailed="newImage_ImageFailed" HorizontalAlignment="Right" Margin="10" />
</ScrollViewer>

为了初始化它,我displayImage();从另一个类调用。

我希望这个图像在我运行应用程序后立即可见。我想如何在不从另一个类调用它的情况下对其进行初始化?

非常感谢。

问候

4

1 回答 1

3

我不确定你为什么尝试在代码中设置它。在 XAML 中设置它更容易:

<ScrollViewer Name="MyScrollViewer" CanContentScroll="True" HorizontalScrollBarVisibility="Visible" Grid.Row="1" Grid.Column="1" >
    <Image Name="newImage" ImageFailed="newImage_ImageFailed" 
                           HorizontalAlignment="Right" Width="900" 
                           Height="700" Margin="10" Source="/Images/test.jpg" />
</ScrollViewer>

以上应该已经可以解决问题了。请注意,我还为图像设置了WidthHeight值。不需要任何代码来实现这一点。

如果您真的想在启动时在代码中设置图像,则需要在 WPF 页面/窗口的构造函数中。类的构造函数在创建类时被调用。在这种情况下,当需要创建 Window 或 Page 时,您的应用程序所做的第一件事就是调用构造函数。在这个构造函数中,应用程序还了解到必须构建一些图形内容。这就是构造函数的工作方式。

之后InitializeComponent();,你可以放任何你喜欢的东西。例如:

public partial class MainWindow : Page
{
    public MainWindow()
    {
        InitializeComponent();
        displayImage();
    }

    private void displayImage()
    {
        newImage.Width = 900;
        newImage.Height = 700;

        BitmapImage testim = new BitmapImage();
        testim.BeginInit();
        testim.UriSource = new Uri("E:\\WpfApplication1\\Images\\test.jpg");
        testim.EndInit();

        newImage.Source = testim;
    }
}

如果路径将是动态的,则绑定图像是最佳实践。在您的 XAML 中,有如下内容:

<Image>
    <Image.Source>
        <BitmapImage UriSource="{Binding Path=ImagePath}" />
    </Image.Source>
</Image>

所以 UriSource 绑定到你的ImagePath. 在代码中,具有以下内容:

public BitmapImage ImagePath
{ get { return testim; } }

所以它与此有关。如果更改值,绑定会确保 GUI 中的值随之更改。

于 2013-06-04T13:18:10.380 回答