WPF关于Tooltip的Binding

有一个TextBox,Text属性是一个图片的路径,然后一个控件的Tooltip,它里面有一个Image显示该图片。我把Image的Source属性绑定到该TextBox... 有一个TextBox,Text属性是一个图片的路径,然后一个控件的Tooltip,它里面有一个Image显示该图片。
我把Image的Source属性绑定到该TextBox的Text属性上,但是没有效果。请问要如何绑定。
(绑定表达式是没错的,因为如果我把它放到外面而不放在Tooltip里就是可以的,我估计绑定不成功的原因是Tooltip控件不在VisualTree内,其次,可以用特殊的方法把Tooltip与外部字符串绑定,并显示该字符串,但是图片用该方法不好用)
展开
 我来答
pathou
2016-05-10
知道答主
回答量:5
采纳率:0%
帮助的人:2.9万
展开全部
新建一个CS类文件主要内容如下

public class ImgConverter : IValueConverter
{
#region IValueConverter 成员

public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
DateTime date = (DateTime)value;
return date.ToShortDateString();
}

object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
byte[] ageInt = (byte[])value;
return GetImage(ageInt);

}

object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//string strValue = value.ToString();
//Int16 resultAge;
//if (Int16.TryParse(strValue, out resultAge))
//{
// return resultAge;
//}
return value;
}

public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return DEncrypt4ImageHelper.DecryptByteFile( bytes);
}

BitmapImage GetImage(byte[] rawImageBytes)
{
BitmapImage imageSource = null;
try
{
using (var stream = new MemoryStream(DEncrypt4ImageHelper.DecryptByteFile(rawImageBytes)))
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
bitmap.Freeze();
imageSource = bitmap;
}

//using (MemoryStream stream = new MemoryStream(rawImageBytes))
//{
// stream.Seek(0, SeekOrigin.Begin);
// BitmapImage b = new BitmapImage();

// b.SetSource(stream);
// imageSource = b;
//}
}
catch (System.Exception ex)
{
}

return imageSource;
}
#endregion

}

xaml UserControl <> //里加入
xmlns:my="clr-namespace:上面类的命名空间"

xaml <UserControl.Resources> //里加入
<my:ImgConverter x:Key="ImgConvert"/>
</UserControl.Resources>

xaml Datagrid下面代码
<c1:C1DataGrid.Columns> //里面加入
<c1:DataGridTemplateColumn Header="内容">
<c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Width="240" >
<Image Source="{Binding 图片Byte[] ,Converter={StaticResource ImgConvert}}" HorizontalAlignment="Left" Margin="10,0,0,0" Width="24" Height="24" >
</Image>
<Label Height="Auto" HorizontalAlignment="Left" Name="label1" VerticalAlignment="Center" Margin="50,0,0,0" Width="Auto" Content="{Binding 图片名称}" />
</Grid>
</DataTemplate>
</c1:DataGridTemplateColumn.CellTemplate>
</c1:DataGridTemplateColumn>
</c1:C1DataGrid.Columns>
如上代码中 图片Byte[] 和 图片名称 换成你Itemsource里的列名

DEncrypt4ImageHelper.DecryptByteFile 是网上的代码 你找一下。我的图片Byte[] 是加密的byte[].所以需要解密。你可以自己改改
网易云信
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同... 点击进入详情页
本回答由网易云信提供
阳光的雷咩咩
2014-03-12 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7844万
展开全部
        <TextBox Text="D:\\1.jpg">
            <TextBox.ToolTip >
                <ToolTip DataContext="{Binding Path=PlacementTarget, 
                    RelativeSource={x:Static RelativeSource.Self}}">
                    <Image Source="{Binding  Path=Text}"/>
                </ToolTip>
            </TextBox.ToolTip>
        </TextBox>
更多追问追答
追问
大哥!!我知道你这种方法可以!我在提问中也说过这个是可以的,我问的是如何绑定image的Source
追答
那你就把你所谓不行的代码贴出来修改。难道我上面绑定的不是image的source?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式