2011-09-19 11 views
5

que tiene un control de usuario y quiero utilizarlo en algún otro proyecto. No hay ningún problema cuando establezco un valor para sus propiedades directamente:Problema con la aplicación de estilo en el control de usuario de WPF

<local:MyUserControl prop1="val1" prop2="val2"> 
    ... 
</local:MyUserControl> 

Pero no puedo aplicarle un estilo. Intenté:

<Window ...> 
    <Window.Resources> 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type local:MyUserControl}"> 
      <Setter Property="prop1" Value="val1"/> 
      <Setter Property="prop2" Value="val2"/> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <local:MyUserControl Style="{StaticResource ResourceKey=MyUserControlStyle}"> 
      ... 
     </local:MyUserControl> 
    </Grid> 
</Window> 

¿Dónde me equivoqué? -gracias

+0

Hola querido @Mario! Lo corregí. -Gracias – Mimi

+0

¿Ve un error o simplemente no ve su estilo aplicado? –

+0

@Dan Mi control de usuario es un visor de desplazamiento que muestra un botón animado con forma de flecha en cada lado requerido de su hijo. Cuando aplico el estilo, desaparecen los botones con forma de flecha. (No recibo ningún error ni en el momento del diseño ni en el tiempo de ejecución). – Mimi

Respuesta

5

Usando las instrucciones del querido @Mario Vernari, me pareció que el problema se debía a una mala estrategia que había utilizado para crear mi control de usuario. Quería crear un UserControl que pudiera contener algunos otros. Así que había intentado esto:

<UserControl x:Class="MyNamespace.MyUserControl" 
      ... 
      Style="{DynamicResource ResourceKey=MyUserControlStyle}"> 
    <UserControl.Resources> 
     ... 
     <Style x:Key="MyUserControlStyle" TargetType="{x:Type UserControl}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type UserControl}"> 
         <Border BorderBrush="{Binding Path=DP1}"> 
          ... 
          <ContentPresenter ... Content="{TemplateBinding Content}"/> 
          ... 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </UserControl.Resources> 
</UserControl> 

Dónde DP1 es una propiedad de dependencia del tipo Brush. El UserControl que se ha creado de este modo funciona si establece sus propiedades (como DP1) directamente. Absolutamente este no es el verdadero camino como me dijo @Mario:

... Cuando se utiliza un control de usuario, significa que ya sabe su diseño, y no hay necesidad de aplicar estilo al control adicional. Está definiendo su estilo dos veces al mismo tiempo por lo tanto resulta una colisión ...

Y añadió:

En su lugar, se debe utilizar un CustomControl; Defina el estilo predeterminado en la carpeta Temas (si tiene Visual Studio regular, lo hace automáticamente). Después, puede anular el estilo predeterminado en su propia aplicación. De la misma forma que harías para una clase base normal y su derivada.

Siga esto: http://www.codeproject.com/KB/WPF/WPFCustomControl.aspx ...

Obviamente, en este caso tenemos que derivar de nuestro control lookless de ContentControl clase (en lugar de Control clase). Puede echar un vistazo a this & this para dominar los detalles.

Aquí, doy gracias a @Mario nuevo. ;)

0

Usted está dando Style="{StaticResource ResourceKey=MyUserControlStyle}".

Es sólo - Style="{StaticResource MyUserControlStyle}".

+0

Como esperaba, esto no tuvo ningún efecto en él. – Mimi

+3

@Varun: La última muestra que das es solo una abreviatura de la primera. 'ResourceKey' es la propiedad predeterminada de' StaticResource' markupextension y no * tiene * para nombrarlo. –

Cuestiones relacionadas