WPF绑定以字符串形式返回StaticResource

WPF绑定以字符串形式返回StaticResource,wpf,data-binding,Wpf,Data Binding,我使用带有图像和标签的UserControl创建了一个自定义复选框。我想在每次单击时交换选中和未选中的图像。 到目前为止,我试着做了以下几点 <Image Source="{Binding StateImage}"/> 我的代码不起作用,我最终做了如下工作: public String StateImage { get { return is_checked?"/Resources/Images/Checked.

我使用带有图像和标签的UserControl创建了一个自定义复选框。我想在每次单击时交换选中和未选中的图像。 到目前为止,我试着做了以下几点

<Image Source="{Binding StateImage}"/>
我的代码不起作用,我最终做了如下工作:

public String StateImage
    {
         get
         {
             return is_checked?"/Resources/Images/Checked.png":"/Resources/Images/Unchecked.png";
         }
    }
选中
变量在UserControl的MouseDown事件下修改


有没有一种更简单的方法可以在不写入整个路径和文件名的情况下调用映像?

您可以在
UserControl
中将资源定义为
strings

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             xmlns:s="clr-namespace:System;assembly=mscorlib">
    <UserControl.Resources>
        <s:String x:Key="Checked">pic.png</s:String>
        <s:String x:Key="UnChecked"></s:String>
    </UserControl.Resources>
    <Grid Background="Yellow">
        <Image Source="{Binding StateImage}"/>
    </Grid>
</UserControl>

您始终可以放弃
用户控件
并基于
复选框创建自定义控件
,每个状态具有不同的图像属性,并通过
控制模板.触发器
交换图像。然而,这个建议离你的问题有点远,所以我觉得现在还不应该是一个完整的答案。你甚至不需要自定义控件。一个合适的复选框样式就足够了。我是WPF新手,很难分析控件模板。这就是为什么我使用了一种我很习惯的方法。但我想,除了研究如何覆盖默认模板之外,别无选择。
<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             xmlns:s="clr-namespace:System;assembly=mscorlib">
    <UserControl.Resources>
        <s:String x:Key="Checked">pic.png</s:String>
        <s:String x:Key="UnChecked"></s:String>
    </UserControl.Resources>
    <Grid Background="Yellow">
        <Image Source="{Binding StateImage}"/>
    </Grid>
</UserControl>
private bool is_checked;
public String StateImage
{
    get
    {
        return is_checked ? Resources["Checked"] as string : Resources["UnChecked"] as string;
    }
}