Проблема, связывающая свойство зависимости от Источника изображения

Я создал пользовательский элемент управления для ImageButton как

<Style TargetType="{x:Type Button}">
     <Setter Property="Template">
           <Setter.Value>
              <ControlTemplate TargetType="{x:Type Local:ImageButton}">
               <StackPanel Height="Auto" Orientation="Horizontal">
                 <Image Margin="0,0,3,0" Source="{Binding ImageSource}" />
                 <TextBlock Text="{TemplateBinding Content}" /> 
               </StackPanel>
              </ControlTemplate>
           </Setter.Value>
     </Setter>
</Style>

Класс ImageButton похож

public class ImageButton : Button
    {
        public ImageButton() : base() { }

        public ImageSource ImageSource
        {
            get { return base.GetValue(ImageSourceProperty) as ImageSource; }
            set { base.SetValue(ImageSourceProperty, value); }
        }
        public static readonly DependencyProperty ImageSourceProperty =
          DependencyProperty.Register("Source", typeof(ImageSource), typeof(ImageButton));
    }

Однако я не могу связать ImageSource с изображением как: (Этот код находится в Папке UI, и изображение находится в папке Resource),

  <Local:ImageButton x:Name="buttonBrowse1" Width="100" Margin="10,0,10,0"
 Content="Browse ..." ImageSource="../Resources/BrowseFolder.bmp"/>

Но если я беру простое изображение, оно отображено, если тот же источник указан. Кто-либо может сказать мне, что должно быть сделано?

1
задан Archie 28 April 2010 в 10:04
поделиться

1 ответ

Вам необходимо заменить Binding в ControlTemplate на TemplateBinding , как вы это делали для Контента. property:

<Image Margin="0,0,3,0" Source="{TemplateBinding ImageSource}" />

Кроме того, определение вашего DependencyProperty неверно. Строка должна читать ImageSource вместо просто Source :

DependencyProperty.Register("ImageSource", typeof(ImageSource), ...

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

РЕДАКТИРОВАТЬ: Вам также нужно будет изменить TargetType вашего стиля на ImageButton :

<Style TargetType="{x:Type Local:ImageButton}">
2
ответ дан 3 September 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: