HandyControl icon indicating copy to clipboard operation
HandyControl copied to clipboard

ImageSelector控件在下一次打开时如何显示上一次选中的图片?

Open XzMitsui opened this issue 2 years ago • 5 comments

我使用的场景是为数据上传相应图片,最后复制到项目文件夹中并写入数据库。当我再编辑这条数据时给它换个图片,该控件就没有显示上一次我给它设置的。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确实已经有数据了。请教一下为什么不显示图片呢,是设计使然还是上述操作有问题,如何让其显示出来?谢谢

XzMitsui avatar Oct 13 '23 01:10 XzMitsui

我有想到一种这个效果的替代方案,就是用ImageViewer来显示图片,然后把ImageSelector样式改成一个Button放下面,一个用于展示一个用于浏览😂单独ImageSelector一个控件现在能否完成这个工作?

XzMitsui avatar Oct 13 '23 01:10 XzMitsui

。。。。。。 发现了华点,貌似这个控件的删除图标是根据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);

XzMitsui avatar Oct 13 '23 06:10 XzMitsui

图片选择器好像不能用于回显照片。URL 和 PreviewBrush都是只读的

MicroHeartWangZheng avatar May 24 '24 05:05 MicroHeartWangZheng

图片选择器好像不能用于回显照片网址。和预览画笔都是只读的

@MicroHeartWangZheng 控件本身暂不支持,作者也标记为功能增强了,可以自己写后台代码实现这个效果,我自己业务中就是这么处理的,上面有代码

XzMitsui avatar May 29 '24 13:05 XzMitsui

图片选择器好像不能用于回显照片网址。和预览画笔都是只读的

@MicroHeartWangZheng 控件本身暂不支持,作者也标记为功能增强了,可以自己写后台代码实现这个效果,我自己业务中就是这么处理的,上面有代码

谢谢!

MicroHeartWangZheng avatar Jun 11 '24 03:06 MicroHeartWangZheng