Добавете изображение към бутон в потребителска контрола от локална папка, която може да бъде променена по-късно от крайния потребител

Работя върху принципа на обучение чрез правене и създавам самостоятелна потребителска контрола в 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