WPF关于Tooltip的Binding
有一个TextBox,Text属性是一个图片的路径,然后一个控件的Tooltip,它里面有一个Image显示该图片。我把Image的Source属性绑定到该TextBox...
有一个TextBox,Text属性是一个图片的路径,然后一个控件的Tooltip,它里面有一个Image显示该图片。
我把Image的Source属性绑定到该TextBox的Text属性上,但是没有效果。请问要如何绑定。
(绑定表达式是没错的,因为如果我把它放到外面而不放在Tooltip里就是可以的,我估计绑定不成功的原因是Tooltip控件不在VisualTree内,其次,可以用特殊的方法把Tooltip与外部字符串绑定,并显示该字符串,但是图片用该方法不好用) 展开
我把Image的Source属性绑定到该TextBox的Text属性上,但是没有效果。请问要如何绑定。
(绑定表达式是没错的,因为如果我把它放到外面而不放在Tooltip里就是可以的,我估计绑定不成功的原因是Tooltip控件不在VisualTree内,其次,可以用特殊的方法把Tooltip与外部字符串绑定,并显示该字符串,但是图片用该方法不好用) 展开
2个回答
展开全部
新建一个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[].所以需要解密。你可以自己改改
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 广告
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
展开全部
<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?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询