簡體   English   中英

WPF圖像綁定和轉換器不起作用

[英]WPF Image Binding & Converter Not working

  //in xaml
  //resource
  <local:LocalUriToImageConverter x:Key="MyImageConverter"/>
  //datacontext
  DataContext="{x:Static local:GlobalData.CustomServiceInfo}"
  //image **exception throw at UriSource ** 
  <Image Height="60" Width="60" >
            <Image.Resources>
                <BitmapImage UriSource="{Binding HeadPicUrl , Converter={StaticResource MyImageConverter}}" x:Key="image1"  />
                <FormatConvertedBitmap Source="{StaticResource image1}" x:Key="formattedImage" DestinationFormat="Gray32Float" />
            </Image.Resources>
            <Image.Style>
                <Style  TargetType="Image">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Status}" Value="True">
                            <Setter Property="Source" Value="{StaticResource image1}"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Status}" Value="False">
                            <Setter Property="Source" Value="{StaticResource formattedImage}"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
  </Image>

  --------------------------------------------------------------------------
  //Code
  //model
  public class CustomServiceInfo
    {
        public string Name { get; set; }
        public string HeadPicUrl { get; set; }
        public bool Status { get; set; }

    }
 //init
 public MainWindow()
        {

        GlobalData.CustomServiceInfo = new CustomServiceInfo {
            Name = "nainaigu",
            HeadPicUrl = @"http://avatar.csdn.net/0/5/5/1_haifengzhilian.jpg",
            Status = true ,
            //Type = new Uri("pack://application:,,,/" + "MahAppsDemo" + ";component/" + "Image/my.jpg", UriKind.RelativeOrAbsolute)
            //Type = "pack://application:,,,/" + "MahAppsDemo" + ";component/" + "Image/my.jpg"
        };

        InitializeComponent();
      }

   //Custom Coverter 
   public class LocalUriToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string path = (string)value;
            int BytesToRead = 100;
            try
            {
                var image = new BitmapImage();
                WebRequest request = WebRequest.Create(new Uri(path, UriKind.Absolute));
                request.Timeout = -1;
                WebResponse response = request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                BinaryReader reader = new BinaryReader(responseStream);
                MemoryStream memoryStream = new MemoryStream();

                byte[] bytebuffer = new byte[BytesToRead];
                int bytesRead = reader.Read(bytebuffer, 0, BytesToRead);

                while (bytesRead > 0)
                {
                    memoryStream.Write(bytebuffer, 0, bytesRead);
                    bytesRead = reader.Read(bytebuffer, 0, BytesToRead);
                }

                image.BeginInit();
                memoryStream.Seek(0, SeekOrigin.Begin);

                image.StreamSource = memoryStream;
                image.EndInit();
                return image;
            }
            catch (Exception)
            {
                return new BitmapImage();
            }

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

例外msg是{"must set the “UriSource” or “StreamSource”."} 在此處輸入圖片說明

我認為轉換並不麻煩,因為我在Convert方法中設置了調試點,但是在此之前拋出了異常。我不知道上面的代碼在哪里出錯。 這是我在stackoverflow中的第一個問題。 請幫助我。謝謝!

子控件在Image.Resources中定義,而不是在Image中定義。 請如下更新xaml代碼:

<Image Width="45" Height="45" x:Name="headPicture" Cursor="Hand" Source="{Binding HeadPicUrl, Converter={StaticResource MyImageConverter}}" >               
            <Image.Style>
                <Style  TargetType="Image">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Status}" Value="True">
                            <Setter Property="Source" Value="{StaticResource image1}"></Setter>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Status}" Value="False">
                            <Setter Property="Source" Value="{StaticResource formattedImage}"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
  </Image>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM