Доступ объекты ResourceDictionary программно

У меня есть блок средств управления Silverlight, названный "MySilverlightControls". Несколько папок вниз в тот блок, у меня есть класс, который расширяет столбец сетки от стороннего поставщика, давайте назовем его "MyImageColumn.cs".

Я также создал названный словарь ресурса Generic.xaml, это расположено в Themes папка блока. В том словаре ресурса я определил ControlTemplate по имени MyImageColumnTemplate:

<ControlTemplate x:Name="MyImageColumnTemplate" >
    <Grid Margin="8,8,4,4" MaxHeight="32" MaxWidth="32">
        <Grid.Resources>
            <localGrid:StatusColumnImageConverter x:Key="ImageContentConverter"/>
        </Grid.Resources>
        <Border Margin="5,5,0,0" Background="Black" Opacity="0.15" CornerRadius="5" />
        <Border Background="#FF6E6E6E" CornerRadius="4,4,4,4" Padding="4" Margin="0,0,5,5">
            <Border Background="White" CornerRadius="2,2,2,2" Padding="3">
                <Image Source="{Binding EditValue, Converter={StaticResource ImageContentConverter}}" Stretch="Uniform"/>
            </Border>
        </Border>
    </Grid>
</ControlTemplate>

Мой вопрос: от MyImageColumn, как я могу программно сослаться/загрузить на этот шаблон управления, таким образом, я могу присвоить его свойству на столбце? Я ожидал бы использовать синтаксис, подобный этому:

ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];

но это всегда возвращает пустой указатель. Когда я загружаю блок в Отражателе, я вижу что Generic.xaml файл там, название ресурса MySilverlightControls.g.resources, и путь в этом themes/generic.xaml.

Как точно я могу добраться до отдельных объектов в этом словаре ресурса?

16
задан Vikrant 2 November 2016 в 11:26
поделиться

1 ответ

У него было решено.

Мне нужно было:

  • Нагрузка на мой словарь ресурсов
  • объединить его с ресурсами приложения
  • нагружать мой шаблон управления из ресурса приложений

как часть загрузки словаря ресурсов, мне также пришлось зарегистрироваться Pack Pack схема URI. Затем я должен был разобраться с некоторыми сумасшедшими исключениями на основе COM из-за небольших ошибок с моим XAML. Мне также пришлось переместить свой XAML в отдельный файл словаря ресурсов, пытаясь сделать это через Generic.xaml, продолжал бросать ошибки (хотя XAML был безупречен и может быть загружен тонкой, используя вновь созданный файл словаря ресурсов). Итак, упрощение его, это был код:

if (!UriParser.IsKnownScheme("pack"))
    UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);

ResourceDictionary dict = new ResourceDictionary();
Uri uri = new Uri("/MySilverlightControls;component/themes/Dictionary1.xaml", UriKind.Relative);
dict.Source = uri;
Application.Current.Resources.MergedDictionaries.Add(dict);
ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];

Я опубликовал полную информацию для этого решения в в этом посте в блоге .

30
ответ дан 30 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

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