WPF 从另一个控件向用户控件的 ImageSource 添加数据触发器

WPF Adding a datatrigger to the ImageSource of a user control from another control

我有以下用户控件:

<Border
        Style="{StaticResource notificationBarBorderStyle}"
        Height="21"
        >
        <StackPanel
            Orientation="Horizontal"
            Style="{StaticResource notificationBarStyle}"
            >
            <DockPanel>
                <Image
                    Width="17"
                    Height="16"
                    Margin="4,0,11,0"
                    Source="{Binding ElementName=NotificationControl, Path=ImageSource}"
                    />
                <TextBlock
                    x:Name="notificationTextBlock"
                    VerticalAlignment="Center"
                    Style="{StaticResource textBlockStyle}"
                    Text="{Binding ElementName=NotificationControl, Path=Message}"
                    />
            </DockPanel>
        </StackPanel>
    </Border>

然后在另一个用户控件中我尝试像这样引用它:

<Controls:NotificationBarControl
                Grid.Row="2"
                Grid.Column="0"
                DataContext="{Binding IncomingResult}"
                Message="{Binding TaskResultsMessage}"
                Visibility="{Binding Path=ShowTaskResults, Converter={StaticResource boolToHiddenVisibilityConverter}}"
                Command="{Binding DisplayTaskError}"
                ImageSource="{DynamicResource somePicture1}"
                >

我希望能够在图像源上放置一个数据触发器,以便根据布尔标志的状态显示不同的图像(称之为 somePicture2)。我真的不想做太多改变控件本身,因为它在一个相当大的项目中被引用了几次,我不想破坏任何东西。

您可以将控件的 Style 属性 设置为带有 DataTriggerStyle 绑定到您的 bool 属性 :

<Controls:NotificationBarControl
                Grid.Row="2"
                Grid.Column="0"
                DataContext="{Binding IncomingResult}"
                Message="{Binding TaskResultsMessage}"
                Visibility="{Binding Path=ShowTaskResults, Converter={StaticResource boolToHiddenVisibilityConverter}}"
                Command="{Binding DisplayTaskError}">
    <Controls:NotificationBarControl.Style>
        <Style TargetType="Controls:NotificationBarControl">
            <Setter Property="ImageSource" Value="{StaticResource somePicture1}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding YourBooleanSourceProperty}" Value="True">
                    <Setter Property="ImageSource" Value="{StaticResource somePicture2}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Controls:NotificationBarControl.Style>
</Controls:NotificationBarControl>