Pergunta

Eu tenho controles Silverlight montagem, chamados de "MySilverlightControls". Várias pastas para baixo para que a montagem tenho uma classe que estende uma coluna de grade a partir de um fornecedor de terceiros, vamos chamá-lo "MyImageColumn.cs".

Além disso, criei um dicionário de recurso chamado Generic.xaml, este está situado na pasta Themes do conjunto. Nesse dicionário de recursos i ter definido um ControlTemplate chamado 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>

A minha pergunta é: de MyImageColumn, como posso programaticamente referência / carregar este modelo de controle para que eu possa atribuí-la a uma propriedade na coluna? Eu esperaria estar usando uma sintaxe semelhante a esta:

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

mas isso retorna nulo sempre. Quando eu carregar o assembly em refletor, vejo que o arquivo Generic.xaml está lá, o nome do recurso é MySilverlightControls.g.resources, eo caminho dentro desse é themes/generic.xaml.

Como exatamente posso obter para os itens individuais neste dicionário de recursos?

Foi útil?

Solução

Got-lo resolvido.

Eu precisava:

  • carregar o meu recurso dicionário
  • mesclá-lo com os recursos do aplicativo
  • carregar o meu modelo de controle do recurso de aplicativo

Como parte de carregar o dicionário de recurso, eu também tive que registrar o esquema de URI pack. Eu, então, teve de lidar com algumas exceções baseados COM loucas devido a pequenos erros com o meu XAML. Eu também tive que mudar meu xaml em um arquivo de dicionário de recursos separado, tentando fazê-lo através generic.xaml manteve jogando erros (mesmo que o xaml era impecável e poderia ficar bem carregado usando o arquivo de dicionário de recursos recém-criado). Então, simplificando-a para baixo, este foi o código:

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"];

Eu afixei os pormenores para esta solução em neste blog pós .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top