Добавьте изображение к кнопке в пользовательском элементе управления из локальной папки, которую позже может изменить конечный пользователь.

Я работаю над принципом обучения на практике и создаю автономный пользовательский элемент управления в wpf, который затем можно использовать в будущих проектах.

У меня есть несколько кнопок в этом элементе управления, каждая из которых имеет свойство изображения, определенное как свойство зависимости, позволяющее конечному пользователю использовать любое изображение, которое он предпочитает.

В xaml кнопка определяется так:

<Button Background="#00000000" x:Name="First" Height="Auto" Width="Auto" ToolTip="Go to First Record.">
            <StackPanel Margin="2" Orientation="Horizontal">
                <Image Source="{Binding ImageFirst, ElementName=DN}"
                   Width="{Binding ImageFirstWidth, ElementName=DN}"
                   Height="{Binding ImageFirstHeight, ElementName=DN}"/>
                <TextBlock Margin="3" Text="{Binding TextFirst,ElementName=DN}"/>
            </StackPanel>
        </Button>

и соответствующее свойство зависимости изображения определяется следующим образом:

Public Property ImageFirst() As ImageSource
    Get
        Return DirectCast(GetValue(ImageFirstProperty), ImageSource)
    End Get
    Set(value As ImageSource)
        SetValue(ImageFirstProperty, value)
    End Set
End Property


Public Shared ReadOnly ImageFirstProperty As DependencyProperty = DependencyProperty.Register("ImageFirst", GetType(ImageSource), GetType(DataNavigator), New UIPropertyMetadata(Nothing))

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

Что я хотел бы сделать сейчас, так это добавить набор изображений по умолчанию для бутонов. Я создал папку в проекте (образно названную «Изображения»), в которую я добавил набор изображений, которые будут использоваться по умолчанию. Прав ли я, думая, что если я изменю часть UIPropertyMetadata объявления свойства зависимостей с нуля на ссылку на одно из этих изображений, это изображение будет использоваться по умолчанию, но все же позволит конечному пользователю выбрать другое, если они того пожелают.

Если это так, как мне определить часть UIPropertMetadata. Я попробовал UIPropertyMetadata("\Images\first16.png"), но это не сработало.

Большое спасибо за любые ваши предложения.


person Dom Sinclair    schedule 15.12.2014    source источник


Ответы (1)


Настройка изображения по умолчанию немного сложнее. Вам нужно создать объект класса BitmapImage с правильно инициализированным Uri. Вот как у меня это в моем коде:

private static readonly ImageSource DefaultImage = new BitmapImage(new Uri("pack://application:,,,/MyAppNamespace;component/Images/default.png",UriKind.RelativeOrAbsolute));

public static readonly DependencyProperty PictureSourceProperty = DependencyProperty.Register("PictureSource", typeof (ImageSource), typeof (RecordPicture), new PropertyMetadata(DefaultImage));

public ImageSource PictureSource
{
    get { return (ImageSource) GetValue(PictureSourceProperty); }
    set { SetValue(PictureSourceProperty, value); }
}
person Nick Sologoub    schedule 15.12.2014