2009-09-23 13 views
9

Digamos que tengo una cuadrícula, dentro de mi cuadrícula tengo una serie de controles. En lugar de establecer el margen para cada uno de estos controles, deseo crear un estilo para establecer el margen de CUALQUIER control que coloque en una grilla. es posible?Aplicación de estilos WPF a elementos secundarios

Tenía la esperanza de que el siguiente funcionaría:

<Window.Resources> 
    <Style x:Key="DefaultMargins"> 
     <Setter Property="Control.Margin" Value="3, 3, 3, 3"/> 
     <Setter Property="Control.FontSize" Value="50"/> 
    </Style> 
</Window.Resources> 
<Grid Style="{StaticResource DefaultMargins}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="3*"/> 
     <ColumnDefinition Width="3*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="3*"/> 
     <RowDefinition Height="3*"/> 
    </Grid.RowDefinitions> 
    <Button Grid.Row="0" Grid.Column="0" Name="button1">Button</Button> 
</Grid> 

Sin embargo, el margen se ignora, no apoyando valor de la propiedad herencia. ¿Existe una alternativa simple para aplicar los márgenes a cada 'niño' de la cuadrícula? Entiendo que es posible lograr este tipo de cosas en CSS y algunos de nuestros desarrolladores están interesados ​​en usar este tipo de constructo.

Gracias Ian

+0

¿Encontró una respuesta a esto? Lo pregunto porque tengo el mismo problema. –

Respuesta

1

Esto parece responder a una pregunta similar a la suya: Apply style to all TreeViewItem

Si eso no funciona, entonces no estoy muy seguro acerca de cómo se llevaría a cabo en XAML pero podría añadir el estilo en el código subyacente con:

Control element; 

for (int i = 0; i < Grid1.Children.Count; i++) 
{ 
    element = (Control) Grid1.Children[i]; 
    element.Style = (Style) FindResource("DefaultMargins"); 
} 

Editar: Grid1 se refiere a Axe: Nombre = propiedad "Grid1", agregó a la red XAML (mala denominación lo sé).

4

Puede especificar el estilo, según tipo y limitar al alcance de la Grid:

<Grid> 
<Grid.Resources> 
    <Style TargetType="{x:Type Control}"> 
     <Setter Property="Control.Margin" Value="3, 3, 3, 3"/> 
     <Setter Property="Control.FontSize" Value="50"/> 
    </Style> 
</Grid.Resources> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="3*"/> 
    <ColumnDefinition Width="3*"/> 
</Grid.ColumnDefinitions> 
<Grid.RowDefinitions> 
    <RowDefinition Height="3*"/> 
    <RowDefinition Height="3*"/> 
</Grid.RowDefinitions> 
<Button Grid.Row="0" Grid.Column="0" Name="button1">Button</Button> 

+0

Sin embargo, esto también se aplicará a niños de niños, etc. Vea mi respuesta a continuación para la solución exacta usando 'ItemsControl.ItemContainerStyle'. –

+0

Probé tu código, pero no pude hacerlo funcionar. Después de profundizar, descubrí que WPF no aplica un estilo a un control cuando la propiedad TargetType de ese estilo se establece en la clase base de ese control. http://stackoverflow.com/questions/1026635/setting-a-styles-targettype-property-to-a-base-class – addy689

+0

Esto solía funcionar. No publico el código de que no perrito la comida. – Jordan

0

elementos lugar dentro ItemsControl con ItemsPanel conjunto de Grid y ItemContainerStyle a su estilo:

<Window.Resources> 
    <Style x:Key="DefaultMargins"> 
    <Setter Property="Control.Margin" 
      Value="3, 3, 3, 3" /> 
    <Setter Property="Control.FontSize" 
      Value="50" /> 
    </Style> 
</Window.Resources> 
<ItemsControl ItemContainerStyle="{StaticResource DefaultMargins}"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="3*" /> 
      <ColumnDefinition Width="3*" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="3*" /> 
      <RowDefinition Height="3*" /> 
     </Grid.RowDefinitions> 
     </Grid> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <Button Grid.Row="0" 
      Grid.Column="0" 
      Name="button1">Button</Button> 

</ItemsControl> 

Esto tiene el inconveniente de que no funciona bien con el diseñador.

+0

esto parece ser exactamente lo que estaba buscando. Si vuelvo más tarde, pruébalo y funciona, luego votaré de nuevo. – Maslow

Cuestiones relacionadas