WPF绑定返回静态资源作为字符串
问题描述:
我创建了一个自定义复选框,使用内部具有图像和标签的UserControl。我想在每次点击时选中Checked和Unchecked图像。 到目前为止,我试着做以下WPF绑定返回静态资源作为字符串
<Image Source="{Binding StateImage}"/>
我有一个名为StateImage
public String StateImage
{
get
{
return is_checked?"{StaticResource Checked}":"StaticResource Unchecked";
}
}
我的代码不能正常工作性质和我落得这样做是这样的:
public String StateImage
{
get
{
return is_checked?"/Resources/Images/Checked.png":"/Resources/Images/Unchecked.png";
}
}
的is_checked
变量在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>
private bool is_checked;
public String StateImage
{
get
{
return is_checked ? Resources["Checked"] as string : Resources["UnChecked"] as string;
}
}
您可以随时沟'UserControl'并创建一个基于'Checkbox'一个自定义的控制,具有不同的图像特性为每个状态并通过'ControlTemplate.Triggers'交换图像。但是,这个建议与你的问题有点相似,所以我觉得现在不应该是一个完整的答案。 – grek40
你甚至不需要自定义控件。一个适当的复选框样式就足够了。 – Clemens
我是WPF的新手,我很难分析控件模板。这就是为什么我使用了我感觉舒适的方法。但我想,除了研究如何覆盖他们的默认模板外,没有别的办法。 –