Проблемы с загрузкой изображения WPF в коде, где я иду не так? - PullRequest
0 голосов
/ 26 октября 2009

У меня есть изображение в моем xaml как:

<Image Name="TotalFloors" Width="98" Source="../Images/FloorOne.png" Margin="0 0 0 10" VerticalAlignment="Bottom" />

Это нормально загружается, однако все, что я пытался получить это изменение изображения в коде, ничего не отображало.

Я попробовал MessageBox.Show (TotalFloors.Source.ToString ()); и он вернулся:

упаковка: // Применение: ,,, / MyClient; компонент / Images / FloorOne.png

Который затем побудил меня использовать этот код:

        private void GetFloorImg()
    {
        MessageBox.Show(TotalFloors.Source.ToString());
        BitmapImage floorImage = new BitmapImage();
        Uri uriSource;
        switch (App.selectedBuilding.Floors)
        {
            case 1:
                uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorOne.png", UriKind.Absolute);
                break;
            case 2:
                uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorTwo.png", UriKind.Absolute);
                break;
            case 3:
                uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorThree.png", UriKind.Absolute);
                break;
            default :
                throw new NotImplementedException();
        }
        floorImage.UriSource = uriSource;
        TotalFloors.Source = floorImage;

    }

Однако это тоже не работает. Изображения все настроены на ресурс в папке. И точка останова показывает, что мой код попал в цель.

Есть идеи? ТИА, Кохан.

Ответы [ 3 ]

2 голосов
/ 26 октября 2009

Просто небольшая модификация вашего кода:

private void GetFloorImg()
{
    MessageBox.Show(TotalFloors.Source.ToString());
    BitmapImage floorImage = new BitmapImage();
    Uri uriSource;
    switch (App.selectedBuilding.Floors)
    {
        case 1:
            uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorOne.png", UriKind.Absolute);
            break;
        case 2:
            uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorTwo.png", UriKind.Absolute);
            break;
        case 3:
            uriSource = new Uri("pack://application:,,,/MyClient;component/Images/FloorThree.png", UriKind.Absolute);
            break;
        default :
            throw new NotImplementedException();
    }
    floorImage.BeginInit();
    floorImage.UriSource = uriSource;
    floorImage.EndInit();
    TotalFloors.Source = floorImage;

}
1 голос
/ 26 октября 2009

Это виновник:

floorImage.UriSource = uriSource;
TotalFloors.Source = floorImage;

вместо этого используйте это:

TotalFloors.Source = new BitmapImage(uriSource);
1 голос
/ 26 октября 2009

Попробуйте это:

private void GetFloorImg()
{
    string logoFileLocation = "pack://application:,,,/MyClient;component/Images/";

    switch (App.selectedBuilding.Floors)
    {
        case 1:
            logoFileLocation += "FloorOne.png";
            break;
        case 2:
            logoFileLocation += "FloorTwo.png";
            break;
        case 3:
            logoFileLocation += "FloorThree.png";
            break;
        default :
            throw new NotImplementedException();
    }

    TotalFloors.Source = BitmapFrame.Create(new Uri(logoFileLocation, UriKind.RelativeOrAbsolute));
}

PS: Действие «Создать для изображений» должно быть «Ресурс», и после добавления или изменения ресурса необходимо перестроить решение. Вы знаете первую часть (которую вы написали в вопросе), и я думаю, что вы знаете и вторую, но на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...