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>

上記はすでにトリックを行うはずです。Width画像のとHeightの値も設定したことに注意してください。これを実現するためのコードは必要ありません。

また、開始時にコードに画像を設定したい場合は、WPF ページ/ウィンドウのコンストラクターにいる必要があります。クラスのコンストラクターは、クラスの作成時に呼び出されます。この場合、ウィンドウまたはページを作成する必要がある場合、アプリケーションが最初に行うことは、コンストラクターの呼び出しです。このコンストラクターでは、アプリケーションは、いくつかのグラフィカルなものを構築する必要があることも学習します。それがコンストラクタの仕組みです。

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 に答える