Чередуйте изображения при нажатии кнопки wpf - PullRequest
0 голосов
/ 12 января 2020

В моем проекте wpf у меня есть что-то вроде this

У меня есть изображение с двумя кнопками рядом, я хотел бы сделать так, чтобы, если я нажму одну кнопку, оно изменяет источник этого изображения, и если вы щелкнете по нему еще раз, он перейдет к следующему, но если вы нажмете button 2, у него будет тот же цикл , но в обратном порядке. Я пытался сделать что-то вроде этого:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        image.Source = new BitmapImage(new Uri("/Resources/image1.png", UriKind.RelativeOrAbsolute));
    }

Но если я хочу сделать это снова, мне придется сделать что-то вроде

if(image.Source == "/Resources/image1.png") {

code...
}

Это не работает, потому что не может конвертировать источник в строку. Как я смогу сделать это? Это также очень утомительно, если у меня много изображений, есть ли лучший способ сделать это? Я искал везде, но я не могу найти ответ. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 15 января 2020

Я бы сделал что-то подобное

XAML, похожее на это:

<Window
x:Class="WPFAppTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WPFAppTest"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Image x:Name="ImageHolder" />
    <StackPanel VerticalAlignment="Bottom" Orientation="Horizontal">
        <Button
            x:Name="Previous"
            Click="Previous_Click"
            Content="Previous" />
        <Button
            x:Name="Next"
            Click="Next_Click"
            Content="Next" />
    </StackPanel>
</Grid>

И для кода, стоящего за чем-то вроде этого:

public partial class MainWindow : Window
{
    private List<BitmapImage> bitmapImages { get; set; }
    private int Index { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        bitmapImages = new List<BitmapImage>()
        {
           new BitmapImage(new Uri(@"Assets/1.png",UriKind.Relative)),
           new BitmapImage(new Uri(@"Assets/2.png",UriKind.Relative)),
           new BitmapImage(new Uri(@"Assets/3.png",UriKind.Relative)),
        };
        Index = 0;
        ImageHolder.Source = bitmapImages.FirstOrDefault();
    }

    private void Previous_Click(object sender, RoutedEventArgs e)
    {
        Index = (Index - 1) == -1 ? bitmapImages.Count -1 : (Index - 1);
        ImageHolder.Source = bitmapImages[Index];
    }

    private void Next_Click(object sender, RoutedEventArgs e)
    {
        Index = (Index + 1) % bitmapImages.Count;
        ImageHolder.Source = bitmapImages[Index];
    }
}

Со списком BitmapImages, инициализированным в конструкторе, и индексом, в котором хранится текущее отображаемое BitmapImage в списке.

Тогда вам просто нужно сохранить индекс между 0 и счетчиком BitmapImages в вашем список и все готово =)

PS: для свойств изображений задано значение Построить действие: Содержимое и Скопировать в выходной каталог: Копировать, если новее

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