Не могу заставить работать следующее, должно быть не хватает чего-то элементарного. Моя цель - создать стиль в диалоговом окне (окне), чтобы установить изображение на кнопке внутри него. Итак, что у меня есть в коде диалога, я добавил DependencyProperty следующим образом:
public static readonly DependencyProperty ImageRefreshProperty =
DependencyProperty.Register(nameof(ImageRefreshProperty), typeof(ImageSource),
typeof(MyDlg), new PropertyMetadata(new BitmapImage(
new Uri(@"pack://application:,,,/component/Resources/refresh.png"))));
public ImageSource ImageRefresh {
get { return (ImageSource)GetValue(ImageRefreshProperty); }
set { SetValue(ImageRefreshProperty, value); }
}
В Xaml у меня есть это:
<Button DockPanel.Dock="Left" Style="{StaticResource buttonIcon}">
<Image Source="{Binding Path=ImageRefresh,
RelativeSource={RelativeSource AncestorType=local:MyDlg}}" />
</Button>
Это отлично работает, если я использую код для изменения изображения, например
dlg.ImageRefresh = new BitmapImage(
new Uri("pack://application:,,,/component/Resources/refr.png"));
Но в идеале я хотел бы установить изображение с помощью стиля, например, следующим образом:
<Style TargetType="{x:Type MyDlg}">
<Setter Property="ImageRefresh" Value="pack://application:,,,/component/Resources/refr.png" />
</Style>
Я получаю следующую ошибку:
System.Windows.Markup.XamlParseException:
''Provide value on 'System.Windows.StaticResourceExtension' threw an exception.'
Inner Exception System.Windows.Markup.XamlParseException:
ArgumentNullException: Key cannot be null. Arg_ParamName_Name
Я также пробовал Setter Value, который определяет внутри него BitmapImage вместо строки, но все равно получаю ту же ошибку:
<Setter Property="ImageRefresh">
<Setter.Value>
<BitmapImage UriSource="pack://application:,,,/component/Resources/refr.png"/>
</Setter.Value>
</Setter>
Установка точки останова для получателя / установщика DependencyProperty даже не затрагивает, равно как и преобразователь при привязке источника изображения.
Что мне здесь не хватает?
Изменить: чтобы узнать, имеет ли ImageSource какое-либо отношение к этому, я протестировал свой код с другим свойством типа bool? для установки свойства IsEnabled кнопки в диалоговом окне, но результат тот же. Таким образом, ошибка связана не с изображением, его URL-адресом пакета (который, кстати, работает), а, по-видимому, с чем-то еще.
/component
папка верхнего уровня в вашем проекте Visual Studio? В противном случае URI должен бытьpack://application:,,,/Resources/refr.png
илиpack://application:,,,/AssemblyName;component/Resources/refr.png
. - person Clemens   schedule 26.01.2021