WPF关于Tooltip的Binding

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF关于Tooltip的Binding相关的知识,希望对你有一定的参考价值。

有一个TextBox,Text属性是一个图片的路径,然后一个控件的Tooltip,它里面有一个Image显示该图片。
我把Image的Source属性绑定到该TextBox的Text属性上,但是没有效果。请问要如何绑定。
(绑定表达式是没错的,因为如果我把它放到外面而不放在Tooltip里就是可以的,我估计绑定不成功的原因是Tooltip控件不在VisualTree内,其次,可以用特殊的方法把Tooltip与外部字符串绑定,并显示该字符串,但是图片用该方法不好用)

新建一个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[].所以需要解密。你可以自己改改
参考技术A         <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?

追问

呃...不好意思,那时候有点急,我说错了...这个我的那个程序的Tooltip不是TextBox的Tooltip,而是另一个控件的。所以与自己绑定的代码对于我而言是无效的。就是说另一个控件(比如Label)的Tooltip显示TextBox中所指定的图片,谢谢了!

追答

你还是留个联系我看看你的具体情况,待会你又会说其他问题。

追问

哈哈,谢谢了 328075027

以上是关于WPF关于Tooltip的Binding的主要内容,如果未能解决你的问题,请参考以下文章

关于wpf中popup跟随鼠标移动显示

WPF ToolTip 绑定

怎样在用C#语句动态实现wpf的tooltip或popup窗口

用WPF实现在ListView中的鼠标悬停Tooltip显示

[WPF]TextTrimming截断后,ToolTip显示完整信息

wpf datagrid tooltip