Domanda

Nuovo per WPF e avere schede e in ogni scheda il contenuto è presentato in un angolo curvo pannello / finestra / whateveryouwannacallit. Non ero sicuro di come fare questo (Style, ControlTemplate), ma ha deciso di andare via DataTemplate.

Così ora ho questo 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>

Come si può vedere con la proprietà lo sfondo ho wa non per impostare il colore di sfondo al contenuto, ma non so come. Qui 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>

E 'sicuro utilizzare DataTemplate sbagliato qui o c'è qualche altro modo?

I probabilmente potrebbe impostare lo sfondo dritto sul contenuto e cambiamento da imbottitura in mthe modello per il margine nel contenuto, ma in alcune situazioni la classica che non avrebbe funzionato e che di più bello di avere solo per impostare una volta.

EDIT:

Come da consiglio che ha cambiato per ControlTemplate e anche metterlo all'interno di uno stile. Questo risolve il problema di sfondo, ma crea uno più grande. Ora il contenuto non verrà visualizzato. Ho letto su un blog qui che mettere un targetType risolve questo ma non ha risolto il mio problema. Gli sguardi codice come questo ora e anche cambiato il ContentControl di utilizzare lo stile al posto di Template.

<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>
È stato utile?

Soluzione

Usa ControlTemplate invece 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>

Usa modello, invece di ContentTemplate

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

Altri suggerimenti

Può essere perché TemplateBinding non funziona con DataTemplate. Controllare questa domanda per i dettagli .

Anche se funziona, tutto ciò che serve è un ControlTemplate e non un DataTemplate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top