Я пытаюсь использовать 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");
}
}
Но когда я отладить функцию Преобразовать я вижу, что первый аргумент с именем «значение» всегда получает нуль.
Гуру, мне нужна ваша помощь.
Если значение равно нуль, то это проблема с переплетом, не с преобразователем ... –
Я думаю, вы правы. проблема в том, что я использую ту же привязку для «testButton», и она там работает. есть ли другой файл данных внутри элемента управления изображением? –
Для управления изображением DataContext является одним и тем же, но, возможно, не для самого CroppedBitmap, потому что он не является частью визуального дерева ... Проверьте выходные окна в VS, чтобы увидеть, есть ли ошибки привязки. Если вы видите что-то вроде «Не удается найти управляющий элемент FrameworkElement ...», это связано с тем, что привязка не может найти DataContext –