C#初始化类

时间:2013-06-04 13:05:02

标签: c# wpf

我在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();

我想在运行应用程序后立即看到此图像。我想如何初始化它而不从另一个类调用它?

非常感谢。

问候

1 个答案:

答案 0 :(得分: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中的值随之更改。