Pregunta

Estoy intentando crear un WRAPPANEL con imágenes perfectas que contengan obras de arte. Reuní la siguiente ContentTemplate con la esperanza de que proporcione el aspecto perfecto requerido; Sin embargo, una línea blanca delgada permaneció alrededor de cada uno de los botones. Puede alguien dirigirme en la direccion correcta?

<Button.ContentTemplate>
    <DataTemplate DataType="{x:Type local:ArtInfo}">
        <Border Name="border" BorderThickness="0" BorderBrush="blue" Height="280" Width="250" Background="#262c40">
            <StackPanel>
                <Grid>
                    <Grid.Resources>
                        <local:MyConverter x:Key="MyConverter"></local:MyConverter>
                        <ObjectDataProvider x:Key="Properties.Settings" ObjectType="{x:Type lcl:Properties.Settings}" />
                    </Grid.Resources>
                    <Image Name="ArtImage" Margin="10,15,0,0" Height="195" Width="195" VerticalAlignment="Top" >
                        <Image.Source>
                                  <Binding Path="ArtImage"/>
                        </Image.Source>
                    </Image>
               </Grid>
            <TextBlock Text="{Binding Path=ArtClass}" Margin="10,-17,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="{Binding Path=Student}" Margin="10,0,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="1998" Margin="10,0,0,0" FontSize="11" Foreground="white" />
        </StackPanel>
    </Border>
    </DataTemplate>
</Button.ContentTemplate>
¿Fue útil?

Solución

El ContentTemplate le dice a WPF cómo mostrar el contenido dentro de El botón: el botón Chrome (como el borde y el fondo) permanece, y el contenido plantado se muestra dentro y sobre ese cromo.

Quieres reemplazar el completo La apariencia del botón, el borde y todo, en lugar de solo personalizar cómo se muestra su contenido. Para hacer esto, debe usar la propiedad de plantilla. El valor de Button.template es una placa de control en lugar de una placa de datos. Dentro de esa placa de control de control, puede usar el contenido presente para mostrar el contenido "con plantilla de datos".

En su caso, dado que su plantilla de datos está haciendo todo el trabajo, puede salirse con la suya Content ContentPresenter como su plantilla:

<Button.Template>
  <ControlTemplate TargetType="Button">
    <ContentPresenter />
  </ControlTemplate>
</Button.Template>

Sin embargo, si todos sus botones están utilizando el mismo fondo, puede mover esto a ControlTemplate:

<Button.Template>
  <ControlTemplate TargetType="Button">
    <Border BorderBrush="Blue" ...>
      <ContentPresenter />
    </Border>
  </ControlTemplate>
</Button.Template>

Luego puede eliminar el borde de la plantilla de datos. Esto realmente solo importaría si estuviera planeando reutilizar el mismo botón. Emplate con otras plantillas de contenido y quisiera mantener la apariencia del botón consistente en diferentes tipos de contenido.

Otros consejos

Cree un UserControl, coloque el Botton y la imagen en una cuadrícula.

<Grid>
  <Image Source="icon.png" Panel.ZIndex="1" />
  <Button 
    Panel.ZIndex="2" 
    FocusVisualStyle="{x:Null}" 
    Background="Transparent"/>
</Grid> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top