Pregunta

Tengo un Silverlight controla el montaje, llamado "MySilverlightControls". Varias carpetas hacia abajo en esa asamblea tengo una clase que se extiende una columna de cuadrícula de un proveedor de terceros, vamos a llamarlo "MyImageColumn.cs".

También he creado un diccionario de recursos llamada Generic.xaml, este se encuentra en la carpeta Themes de la asamblea. En ese diccionario de recursos que he definido un ControlTemplate llamado 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>

Mi pregunta es: desde MyImageColumn, ¿cómo puedo hacer referencia mediante programación / mostrarse la plantilla de control para que pueda asignar a una propiedad en la columna? Yo esperaría a estar utilizando una sintaxis similar a la siguiente:

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

pero esto siempre devuelve un valor nulo. Cuando cargo el montaje en Reflector, veo que el archivo Generic.xaml está ahí, el nombre del recurso es MySilverlightControls.g.resources, y el camino es dentro de ese themes/generic.xaml.

¿Cómo funciona exactamente puedo llegar a los elementos individuales de este diccionario de recursos?

¿Fue útil?

Solución

Tienes que resolver.

que necesitaba:

  • cargar mi diccionario de recursos
  • fusionarlo con recursos de la aplicación
  • cargar mi plantilla de control de la aplicación de recursos

Como parte de la carga del diccionario de recursos, yo también tenía que registrar el esquema URI pack. Entonces tuve que lidiar con algunas excepciones basadas COM locos debido a pequeños errores con mi XAML. También tuve que mover mi xaml en un archivo de diccionario de recursos por separado, tratando de hacerlo a través de generic.xaml mantiene tirar errores (aunque el xaml fue impecable y se pudo cargar muy bien usar el archivo de diccionario de recursos de nueva creación). Por lo tanto, lo que simplifica hacia abajo, éste era el 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"];

He publicado los detalles completos de esta solución en este blog poste .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top