You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF 无需Converter根据状态值加载图片并复用资源模板实现咨询

方案1:复用Style实现(更轻量,推荐)

你不需要额外封装DataTemplate,直接把触发逻辑抽为全局Style即可,调整你的资源代码如下:

<Window.Resources>
    <Style x:Key="DeskStatusImageStyle" TargetType="Image">
        <!-- 配置默认加载的图片,避免状态未更新时空白 -->
        <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnknown.png"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding}" Value="0">
                <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskAvailable.png"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding}" Value="1">
                <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnavailable.png"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding}" Value="2">
                <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnknown.png"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

调用时只需要给Image指定Style,同时把Image的DataContext绑定到对应工位的Status属性即可,示例:

<!-- 第一个工位 -->
<Image x:Name="Desk1" Grid.Column="1" Grid.Row="2" Width="50" Height="50"
       Style="{StaticResource DeskStatusImageStyle}"
       DataContext="{Binding Office[0].Desks[0].Status}"/>

<!-- 第二个工位,只需要修改绑定路径即可 -->
<Image x:Name="Desk2" Grid.Column="2" Grid.Row="2" Width="50" Height="50"
       Style="{StaticResource DeskStatusImageStyle}"
       DataContext="{Binding Office[0].Desks[1].Status}"/>

方案2:保留你原有DataTemplate的实现

如果你希望用DataTemplate的写法,只需要补全DataTrigger的Binding属性,然后用ContentControl调用模板即可。
先调整资源代码:

<Window.Resources>
    <DataTemplate x:Key="DeskImage">
        <Image>
            <Image.Style>
                <Style TargetType="Image">
                    <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnknown.png"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding}" Value="0">
                            <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskAvailable.png"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding}" Value="1">
                            <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnavailable.png"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding}" Value="2">
                            <Setter Property="Source" Value="pack:///application:,,,/Resources/DeskUnknown.png"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
    </DataTemplate>
</Window.Resources>

调用示例:

<ContentControl x:Name="Desk1" Grid.Column="1" Grid.Row="2" Width="50" Height="50"
                Content="{Binding Office[0].Desks[0].Status}"
                ContentTemplate="{StaticResource DeskImage}"/>

内容的提问来源于stack exchange,提问作者user3001499

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:21:02