2012-05-12 3 views
2

Я пытаюсь использовать CroppedBitmap.IValueConverter получает пустое значение - WPF C#

Путь к изображению известен только во время выполнения, поэтому я хочу установить CroppedBitomap.Source через Binding.

Я узнал, что есть известная проблема с CroppedBitmap и ее источником. см.: WPF - using CroppedBitmap in DataTemplate

Эти ссылки рекомендуют использовать преобразователь. Я пытался сделать это, но всегда получаю нулевое значение внутри функции Convert.

Вот вид XAML:

<UserControl> 
    <UserControl.Resources> 
     <local:ImageConverter x:Key="imageConverter" /> 
    </UserControl.Resources> 

    <StackPanel> 
     <Label x:Name="testLabel" Content="{Binding Path=Img}"/> 
     <Button x:Name="testButton" Content="{Binding ElementName=testLabel, Path=Content}"/> 

     <Image Stretch="None"> 
      <Image.Source> 
       <CroppedBitmap Source="{Binding ElementName=testLabel, Path=Content, Converter={StaticResource imageConverter}}" SourceRect="10,10,50,50" />    
      </Image.Source> 
     </Image> 
    </StackPanel> 
</UserControl> 

Ярлык под названием «testLabel» показывает значение из свойства Img без проблем. Кнопка «testButton» показывает то же значение, что и «testLabel».

Вот класс ImageConverter:

public class ImageConverter : IValueConverter 
{ 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      FormatConvertedBitmap fcb = new FormatConvertedBitmap(); 
      fcb.BeginInit(); 
      fcb.Source = new BitmapImage(new Uri((string)value)); 
      fcb.EndInit(); 
      return fcb; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotSupportedException("Cannot convert back"); 
     } 
} 

Но когда я отладить функцию Преобразовать я вижу, что первый аргумент с именем «значение» всегда получает нуль.

Гуру, мне нужна ваша помощь.

+0

Если значение равно нуль, то это проблема с переплетом, не с преобразователем ... –

+0

Я думаю, вы правы. проблема в том, что я использую ту же привязку для «testButton», и она там работает. есть ли другой файл данных внутри элемента управления изображением? –

+0

Для управления изображением DataContext является одним и тем же, но, возможно, не для самого CroppedBitmap, потому что он не является частью визуального дерева ... Проверьте выходные окна в VS, чтобы увидеть, есть ли ошибки привязки. Если вы видите что-то вроде «Не удается найти управляющий элемент FrameworkElement ...», это связано с тем, что привязка не может найти DataContext –

ответ

1

У меня была та же проблема.

Моя ошибка была в том, что связанное свойство было неправильным типом. Это была строка, которая должна была перечислить.

Ошибка сборки. Но во время выполнения моего метода (IValueConverter) .Convert передается значение = null.

Где это происходит - проверьте привязки ...

+0

Спасибо .. Отменил мой план самоубийств – Sayka