HandyControl
HandyControl copied to clipboard
ImageSelector控件在下一次打开时如何显示上一次选中的图片?
我使用的场景是为数据上传相应图片,最后复制到项目文件夹中并写入数据库。当我再编辑这条数据时给它换个图片,该控件就没有显示上一次我给它设置的。Uri属性因为只读,所以我照搬了控件切换图片方法的代码在编辑窗体加载后重设Uri内容,UI和后台代码:
<hc:ImageSelector Grid.Column="2"
Grid.Row="2"
Grid.RowSpan="3"
x:Name="deviceImg"
HorizontalAlignment="Left"
Width="150"
Margin="16 16 0 16"
Filter="All Image Files|*.jpg;*.jpeg;*.png;*.gif;*.bmp"
hc:BorderElement.CornerRadius="10"
StrokeThickness="2"
BorderThickness="2"
Background="Transparent"
BorderBrush="{DynamicResource PrimaryBrush}" />
this.deviceImg.Loaded += (sender, e) =>
{
if (!string.IsNullOrWhiteSpace(model.imageSource))
{
deviceImg.SetValue(ImageSelector.UriPropertyKey, new Uri(model.imageSource));
SetValue(ImageSelector.PreviewBrushPropertyKey, new ImageBrush(BitmapFrame.Create(deviceImg.Uri, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.None))
{
Stretch = deviceImg.Stretch
});
SetValue(ImageSelector.HasValuePropertyKey, true);
SetCurrentValue(FrameworkElement.ToolTipProperty, "this is a picture");
}
};
无奈界面仍然没有显示,ToolTip倒是应用上了。在可视树中查看该控件属性,Uri确实已经有数据了。请教一下为什么不显示图片呢,是设计使然还是上述操作有问题,如何让其显示出来?谢谢
我有想到一种这个效果的替代方案,就是用ImageViewer来显示图片,然后把ImageSelector样式改成一个Button放下面,一个用于展示一个用于浏览😂单独ImageSelector一个控件现在能否完成这个工作?
。。。。。。
发现了华点,貌似这个控件的删除图标是根据HasValue显示的,图片是根据 PreviewBrushPropertyKey 这个属性来的,我发现我之前代码中设置这俩属性时候没有用 deviceImg.SetValue 而是直接用的 SetValue,难怪Uri成功Set了这俩没有。。。
然后改成这样就可以了。。。😂
deviceImg.SetValue(ImageSelector.UriPropertyKey, new Uri(model.imageSource));
deviceImg.SetValue(ImageSelector.PreviewBrushPropertyKey, new ImageBrush(BitmapFrame.Create(deviceImg.Uri, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.None))
{
Stretch = deviceImg.Stretch
});
deviceImg.SetValue(ImageSelector.HasValuePropertyKey, true);
图片选择器好像不能用于回显照片。URL 和 PreviewBrush都是只读的
图片选择器好像不能用于回显照片网址。和预览画笔都是只读的
@MicroHeartWangZheng 控件本身暂不支持,作者也标记为功能增强了,可以自己写后台代码实现这个效果,我自己业务中就是这么处理的,上面有代码
图片选择器好像不能用于回显照片网址。和预览画笔都是只读的
@MicroHeartWangZheng 控件本身暂不支持,作者也标记为功能增强了,可以自己写后台代码实现这个效果,我自己业务中就是这么处理的,上面有代码
谢谢!