WPF Datatemplate-Eigenschaft festgelegt auf Inhalt
-
29-09-2019 - |
Frage
Neu auf WPF und haben Tabs und in jedem Registerkarte wird der Inhalt in einem gekrümmten Eckpaneel / Fenster / whateveryouwannacallit präsentiert. Ich war nicht sicher, wie dieser (Style, Control) zu tun, sondern beschlossen, den Datatemplate Weg zu gehen.
So, jetzt habe ich diese 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>
Wie Sie mit dem die Hintergrundeigenschaft sehen kann ich wan't die Hintergrundfarbe auf den Inhalt zu setzen, aber nicht wissen, wie. Hier verwende ich es.
<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>
Ist mit Datatemplate hier falsch oder gibt es eine andere Art und Weise?
ich wahrscheinlich den Hintergrund gerade auf den Inhalt und die Änderung von padding in mthe Vorlage Marge im Inhalt, sondern in einigen ähnlichen Situationen einstellen könnte, die nicht nur Arbeit und schöner ist es hätte es einmal eingestellt werden.
EDIT:
Wie pro Beratung wechselte ich zu Control und es auch in einem Stil setzen. Dies löst das Problem Hintergrund, sondern schafft eine größere. Nun wird der Inhalt nicht angezeigt. Ich las auf einem Blog hier dass eine target setzen dies löst aber es hat mein Problem nicht lösen. Der Code sieht wie folgt aus jetzt und auch die Content veränderte den Stil statt Template zu verwenden.
<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>
Lösung
Mit Control statt 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>
Vorlage verwenden anstelle von Content
<ContentControl Background="Green" Template="{StaticResource TabContentPresenter}"/>
Andere Tipps
sein kann, weil TemplateBinding
nicht mit Datatemplate funktioniert. Sehen Sie sich diese Frage für Details .
Auch wenn es funktioniert, alles, was Sie brauchen, ist ein Control und kein Datatemplate.