Cómo asignar la imagen URI en un control personalizado -- silverlight campo con silverlight-3.0 campo con custom-controls camp Relacionados El problema

How to assign Image Uri in a custom Control


1
vote

problema

Español

Quiero colocar una imagen dentro de mi control personalizado, así que mi genic.xaml se vea a continuación:

  <Style TargetType="local:generic">             <Setter Property="Template">                 <Setter.Value>                     <ControlTemplate TargetType="local:generic">                         <Grid Background="{TemplateBinding Background}">                             <Rectangle>                                 <Rectangle.Fill>                                     <SolidColorBrush x:Name="BackgroundBrush" Opacity="0" />                                 </Rectangle.Fill>                             </Rectangle>                             <TextBlock Text="{TemplateBinding Text}"                                         HorizontalAlignment="Center"                                         VerticalAlignment="Center"                                        Foreground="{TemplateBinding Foreground}"/>                             <Image Source="{TemplateBinding Source}"                                    HorizontalAlignment="Center"                                    VerticalAlignment="Center"/>                         </Grid>                     </ControlTemplate>                 </Setter.Value>             </Setter> </Style>   

Mi CodeBehind es la siguiente:

  public class Generic : Control     {         public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(Uri), typeof(generic), new PropertyMetadata(""));          public Uri Source         {             get { return (Uri)GetValue(generic.ImageUri); }             set { SetValue(generic.ImageUri, value); }          }         public generic()         {             this.DefaultStyleKey = typeof(generic);         } }   

Apllicación está compilando bien, pero mientras estoy tratando de ejecutarlo, lanza la siguiente excepción:

  $exception   {System.Windows.Markup.XamlParseException: System.TypeInitializationException:  The type initializer for 'testCstmCntrl.themes.generic' threw an exception. ---> System.ArgumentException: Default value type does not match type of property.   

gracias, Subhen

Original en ingles

I want to place an image inside my custom control , so my generic.xaml looks like below:

<Style TargetType="local:generic">             <Setter Property="Template">                 <Setter.Value>                     <ControlTemplate TargetType="local:generic">                         <Grid Background="{TemplateBinding Background}">                             <Rectangle>                                 <Rectangle.Fill>                                     <SolidColorBrush x:Name="BackgroundBrush" Opacity="0" />                                 </Rectangle.Fill>                             </Rectangle>                             <TextBlock Text="{TemplateBinding Text}"                                         HorizontalAlignment="Center"                                         VerticalAlignment="Center"                                        Foreground="{TemplateBinding Foreground}"/>                             <Image Source="{TemplateBinding Source}"                                    HorizontalAlignment="Center"                                    VerticalAlignment="Center"/>                         </Grid>                     </ControlTemplate>                 </Setter.Value>             </Setter> </Style> 

My Codebehind is as follows:

public class Generic : Control     {         public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(Uri), typeof(generic), new PropertyMetadata(""));          public Uri Source         {             get { return (Uri)GetValue(generic.ImageUri); }             set { SetValue(generic.ImageUri, value); }          }         public generic()         {             this.DefaultStyleKey = typeof(generic);         } } 

Apllication is compiling fine but while I am trying to run it throws the following exception :

$exception   {System.Windows.Markup.XamlParseException: System.TypeInitializationException:  The type initializer for 'testCstmCntrl.themes.generic' threw an exception. ---> System.ArgumentException: Default value type does not match type of property. 

Thanks, Subhen

        

Lista de respuestas

0
 
vote

Su ProperyMetaData Especifica una cadena vacía "" Como valor predeterminado, pero la propiedad es de tipo *0 NO *1111 . Use *2 en su lugar.

Es fácil de tener tropezado así porque las propiedades de URI se pueden definir utilizando cadenas en XAML. Sin embargo, el analizador XAML maneja la conversión de una cadena a un URI para que lo haga, aparece como si fuera aceptable asignar una cadena a una propiedad tipificada *313. Sin embargo, no es algo que funcione en el código C #.

 

Your ProperyMetaData specifies an empty string "" as the default value but the property is of type Uri not String. Use new PropertyMetaData(null) instead.

Its easy to get tripped up like this because Uri properties can be defined using strings in Xaml. However the xaml parser handles the conversion of a string to a Uri for you make it appear as though it acceptable to assign a string to a Uri typed property. However its not something that will work in C# code.

 
 
   
   
0
 
vote
vote
La mejor respuesta
 

Ahora lo tengo funcionando, la fuente de la imagen está buscando bitmapimage como fuente. Entonces, al tiempo que obtenga el valor en nuestro método Obtener, tenemos que especificar el mapa de bits como tipo de devolución.

Podemos devolver el mapa de bits pasando nuestro URI desde el nombre registrado de PecnePEPERTY.

Así que ahora se ve mi código a continuación:

  *4  

Gracias AGN para todas sus sugerencias y soporte.

 

Now got it working , the image source is looking for BitmapImage as source . So while getting the value in our get method we have to specify Bitmap as return type.

We can return the bitmap by passing our URI from dependencyProperty registered name.

So now my code looks like below:

 public class generic : Control     {         public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(generic), null);          public BitmapImage Source         {             get {                 //return (Uri)GetValue(generic.ImageUri);                  string strURI =(string) GetValue(generic.ImageUri);                  return new BitmapImage(new Uri(strURI));             }             set { SetValue(generic.ImageUri, value); }          }         public generic()         {             this.DefaultStyleKey = typeof(generic);         }     } 

Thanks agn for all your suggestions and support.

 
 

Relacionados problema

2  VS2010 no puede encontrar Tipo ControlTemplate Aunque System.Windows se hace referencia  ( Vs2010 cannot find type controltemplate even though system windows is referenced ) 
Estoy tratando de aprender Silverlight aquí, creando una plantilla de control personalizada, sin embargo, VS2010 se niega a reconocer el ControlTemplate E...

1  Relación del objeto Control gráfico que genera HTML  ( Object relation graphical control that generates html ) 
Estoy planeando crear una pequeña aplicación web de investigación, que tendrá un control de representación de datos gráficos como un mecanismo de diseño de da...

2  PROBLEMA DE DATCHINGING A UN CONTROL CUSTOM EN SILLIRLIGHT  ( Problem databinding a custom control in silverlight ) 
Estoy intentando el control de datos personalizados en Silverlight 3 y estoy obteniendo problemas extraños con él. My XAML para el control de usuario es est...

2  ¿Cómo hacer una caja de tscrollbox desde tcustomcontrol?  ( How to make a tscrollbox out from tcustomcontrol ) 
He creado un componente que tiene una anulación de pintura en el lienzo y me gustaría establecer un límite en un ancho y la altura mínimos. La barra de despla...

1  El control personalizado WPF tiene diferentes forgidos en el modo de diseñador y en el modo de ejecución  ( Wpf custom control has different foregound in designer and running mode ) 
En un nuevo wpfapp1, estoy agregando un nuevo nombre de control personalizado (WPF) CustomButton. En su constructor estático, configuro el primer plano predet...

2  Tema de aplicación WinForms  ( Winforms application theme ) 
¿Hay alguna forma de cambiar el color SystemColors.ButtonHighlight solo para mi aplicación WinForms? Me gustaría darle un tema diferente. gracias. ...

1  la mejor manera de dibujar la mesa complicada iPhone  ( Best way to draw complicated table iphone ) 
Estoy buscando una idea de cómo dibujar una tabla complicada en UIView. La tabla debe ser muy similar a lo que podemos alcanzar con la tabla HTML, pero no pue...

6  Plantilla de control personalizado WPF - tamaño de fuente relativo  ( Wpf custom control template relative font size ) 
Estoy creando un control de WPF personalizado que digamos por Simplicity Sake tiene un panel de pila vertical con un bloque de texto "Título", seguido de un C...

1  Uso de imágenes de línea personalizadas en ASP.NET TreeView Control  ( Using customized line images in asp net treeview control ) 
Cuando uso mis imágenes de línea propia para personalizar el aspecto del control de TreeView, parece haber un problema de representación en la fila de la tabl...

0  La directiva de JS angular JS - Custome no se está reemplazando con plantilla real  ( Angular js custome directive is not getting replaced with actual template ) 
Estoy aprendiendo a JS angular y me gustaría crear mi directiva personalizada. Mi código JavaScript no muestra ningún error, pero la directiva personalizada n...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos