首页 > 解决方案 > 带有转换器的复选框图像

问题描述

有人可以帮助以下 WPF - 我在将已知图像名称绑定到转换器时遇到问题,以便能够让复选框显示图像而不是复选框。

这是我的静态资源:

<converter:FilePathToImage  x:Key="FileNameToImage" />
<system:String x:Key="ToggledOFFImagePath">ToggledOFF.png</system:String>
<system:String x:Key="ToggledONImagePath">ToggledON.png</system:String>

这是我的复选框样式:

<Style TargetType="{x:Type CheckBox}" x:Key="partRRCheckbox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <StackPanel Orientation="Horizontal">
                    <Image x:Name="checkboxImage" Source="{Binding Path={StaticResource ToggledOFFImagePath}, Converter={StaticResource FileNameToImage}}" Width="50" Height="50"/>
                    <ContentPresenter/>
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter TargetName="checkboxImage" Property="Source" Value="{Binding Path={StaticResource ToggledONImagePath}, Converter={StaticResource FileNameToImage}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

该类型的对象System.String不能应用于需要该类型的属性System.Windows.PropertyPath

这是我的转换器:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    BitmapImage bitmapImage = null;

    if (value is string)
    {
        string name = (string)value;
        bitmapImage = ImageConverters.FileToBitmapImage(name.TrimEnd());
    }

    return bitmapImage;
}

我已经尝试了很多不同的方法来让它工作,但我尝试过的任何东西似乎都无法显示图像。问题是,我需要能够将图像与我的所有其他图像放在同一个文件夹中,这些图像属于不同的项目(资源项目)。我已经使用它绑定到项目中的其他东西,但没有使用静态资源。使用作为我绑定对象的一部分的字符串。这是我第一次使用字符串的静态资源。

标签: c#wpfxaml

解决方案


a 上的Path属性Binding用于指定绑定对象中的属性路径。

每个绑定通常具有以下四个组件:绑定目标对象、目标属性、绑定源和绑定源中要使用的值的路径。

如果您使用静态资源进行绑定,请使用Source,例如:

{Binding Source={StaticResource ToggledONImagePath}, Converter={StaticResource FileNameToImage}}

如果你像这样调整你的风格,它应该可以工作:

<Style TargetType="{x:Type CheckBox}" x:Key="partRRCheckbox">
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type CheckBox}">
            <StackPanel Orientation="Horizontal">
               <Image x:Name="checkboxImage" Source="{Binding Source={StaticResource ToggledOFFImagePath}, Converter={StaticResource FileNameToImage}}" Width="50" Height="50"/>
               <ContentPresenter/>
            </StackPanel>
            <ControlTemplate.Triggers>
               <Trigger Property="IsChecked" Value="True">
                  <Setter TargetName="checkboxImage" Property="Source" Value="{Binding Source={StaticResource ToggledONImagePath}, Converter={StaticResource FileNameToImage}}"/>
               </Trigger>
            </ControlTemplate.Triggers>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

推荐阅读