У меня есть шаблон для управления элементами, показанный ниже. Мне нужны отдельные экземпляры colorProvider для каждого элемента в шаблоне. Каждому элементу элемента управления элементам требуется отдельный экземпляр поставщика цветов в зависимости от предмета, к которому он привязан. Как создать несколько копий staticresource, чтобы staticresource был доступен только для этого элемента.создать несколько копий staticresource
ответ
Чтобы вернуть новый экземпляр статического ресурса каждый раз, когда он запрошен, вы можете использовать атрибут x:Shared
. Это задокументировано на MSDN. Из моего опыта использования этого атрибута вы будете не получить поддержку Intellisense при попытке установить его. В вашем случае атрибут должен быть установлен на ColorProvider
в разделе «Ресурсы» следующим образом.
<ContentPresenter Content="{Binding }" ContentTemplateSelector="{StaticResource chartSelector}">
<ContentPresenter.Resources>
<v:ColorProvider x:Key="colorProvider" x:Shared=false />
</ContentPresenter.Resources>
</ContentPresenter>
Отлично! Это работает, и вы были правы и в отношении intellisense! – florien
Если значение ресурса зависит от данных, вы должны использовать привязку в сочетании с конвертером значений, который возвращает цвет.
colorProvider ресурс никогда не используется в вашем коде. Опишите, как вы планируете использовать этот ресурс. –
На это ссылается шаблон, который будет загружен в contentpresenter. однако в качестве обходного пути мне удалось использовать объект тега управления, чтобы вернуть ссылку на данные, которые должны были инициализировать colorprovider. – TrustyCoder
Звучит как [x: Shared = "False"] (https://msdn.microsoft.com/en-us/library/aa970778%28v=vs.110%29.aspx) case. – icebat