Привязка проблемы Свойство зависимости источника изображения - PullRequest
1 голос
/ 28 апреля 2010

Я создал пользовательский элемент управления для 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 к изображению как: (Этот код находится в папке пользовательского интерфейса, а изображение находится в папке ресурсов)

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

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

1 Ответ

2 голосов
/ 28 апреля 2010

Вам нужно заменить Binding в вашем ControlTemplate на TemplateBinding, как вы это сделали для свойства Content:

<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}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...