Изменение источника изображения в xaml с помощью триггера не работает должным образом - PullRequest
6 голосов
/ 14 апреля 2011

Мне нужно изменить изображение на панели инструментов в соответствии с некоторым логическим свойством в моей viewModel. Я использую триггер, чтобы изменить источник изображения. Это правильный путь? Мой код не работает должным образом, иногда он работает, но иногда изображение остается неизменным.

<Image x:Key="startPauseResumeAnalysisToolbarImage" >
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Setter Property="Source" Value="Resources/ToolbarIcons/play.png" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsAnalysisRunning}" Value="True" >
                        <Setter Property="Source" Value="Resources/ToolbarIcons/pause.png"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
</Image>

1 Ответ

4 голосов
/ 14 апреля 2011

должно работать.Трудно понять, почему это не без остальной части кода.Реализуете ли вы интерфейс INotifyPropertyChanged в любом классе, обладающем свойством IsAnalysisRunning?

Вот небольшой пример, который я использовал для проверки этого:

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:WpfApplication2"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
    <Image >
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Setter Property="Source" Value="Desert.jpg" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsAnalysisRunning}" Value="True" >
                        <Setter Property="Source" Value="Koala.jpg"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="0,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</Window>

MainWindow.xaml.cs:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }
    private bool _isAnalysisRunning = false;
    public bool IsAnalysisRunning
    {
        get { return _isAnalysisRunning; }
        set {
            _isAnalysisRunning = value;
            NotifyPropretyChanged("IsAnalysisRunning");
        }
    }
    private void NotifyPropretyChanged(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }


    public event PropertyChangedEventHandler PropertyChanged;

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        IsAnalysisRunning = !IsAnalysisRunning;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...