Pregunta

Nuevo en WPF y tienen aquí y en cada ficha el contenido se presenta en una esquina curvada del panel / ventana / whateveryouwannacallit. No estaba seguro de cómo hacer esto (Estilo, ControlTemplate), pero decidió seguir el camino DataTemplate.

Así que ahora tengo este DataTemplate:

<DataTemplate x:Key="TabContentPresenter" >
    <Border Margin="10"
            BorderBrush="{StaticResource DarkColorBrush}"
            CornerRadius="8"
            BorderThickness="2"
            Grid.Row="0"
            Padding="5" 
            Background="{TemplateBinding Background}">         

        <ContentPresenter Content="{Binding}" />

    </Border>
</DataTemplate>

Como se puede ver con la propiedad del fondo me wa no para establecer el color de fondo en el contenido, pero no saben cómo. Aquí lo uso.

<Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="120"/>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Background="White">


                <!-- Something Here -->

            </ContentControl>

            <ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Grid.Row="1" Background="Blue">

                <!-- Something Here -->

            </ContentControl>

        </Grid>

Es usar DataTemplate mal aquí o hay alguna otra manera?

Probablemente podría establecer el fondo recta sobre el contenido y el cambio de relleno en mthe plantilla para el margen en el contenido, pero en algunas situaciones semejantes que no funcionaría y es más agradable a sólo tienen que configurar una vez.

EDIT:

Según el consejo que cambió a ControlTemplate y también por el interior de un estilo. Esto resuelve el problema de fondo, sino que crea una más grande. Ahora no aparecerá el contenido. He leído en un blog aquí que poner un targetType soluciona esto, pero no resolvió mi problema. Las miradas de código como esto ahora y también cambió el ContentControl a utilizar el estilo en lugar de la plantilla.

<Style x:Key="TabContentPresenter" TargetType="ContentControl" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Border Margin="10"
            BorderBrush="{StaticResource DarkColorBrush}"
            CornerRadius="8"
            BorderThickness="2"
            Grid.Row="0"
            Background="{TemplateBinding Background}">

                    <ContentPresenter Content="{Binding}" />

                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
¿Fue útil?

Solución

Uso ControlTemplate lugar DataTemplate

 <ControlTemplate  x:Key="TabContentPresenter">
        <Border Margin="10" 
                    CornerRadius="8" 
                    BorderThickness="2" 
                    Grid.Row="0" 
                    Padding="5"  
                    Background="{TemplateBinding Background}">
            <ContentPresenter Content="{Binding}"/>
        </Border>
    </ControlTemplate>

Usar plantilla en lugar de ContentTemplate

<ContentControl  Background="Green" Template="{StaticResource  TabContentPresenter}"/>

Otros consejos

Puede ser debido a TemplateBinding no funciona con DataTemplate. Marque esta cuestión para más detalles .

Incluso si funciona, todo lo que necesita es un ControlTemplate y no un DataTemplate.

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