コンテンツに設定されたWPFデータセテンプレートプロパティ
-
29-09-2019 - |
質問
WPFを使用してタブがあり、各タブには、コンテンツが曲がったコーナーパネル/ウィンドウ/whateveryouwannacallitに表示されます。これを行う方法(Style、ControlTemplate)がわかりませんでしたが、DataTemplateの方法に行くことにしました。
だから今、私はこのdateTemplateを持っています:
<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>
背景のプロパティでわかるように、私はコンテンツに背景色を設定することはできませんが、方法がわかりません。ここで使用します。
<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>
ここでDataTemplateを使用することは間違っていますか、それとも他の方法はありますか?
おそらく、コンテンツに背景をまっすぐに設定し、テンプレートのパディングからコンテンツのマージンに変更することができますが、機能しないいくつかの同様の状況では、一度だけ設定する必要があります。
編集:
アドバイスに従って、私はControlTemplateに変更し、それをスタイル内に入れました。これにより、背景の問題が解決しますが、より大きな問題を作成します。コンテンツが表示されません。私はブログで読みました ここ ターゲットタイプを置くことはこれを解決しますが、それは私の問題を解決しませんでした。コードは今このように見え、コンテンツコントロールを変更してテンプレートの代わりにスタイルを使用しました。
<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>
解決
代わりにcontroltemplateを使用します
<ControlTemplate x:Key="TabContentPresenter">
<Border Margin="10"
CornerRadius="8"
BorderThickness="2"
Grid.Row="0"
Padding="5"
Background="{TemplateBinding Background}">
<ContentPresenter Content="{Binding}"/>
</Border>
</ControlTemplate>
ContentTemplateの代わりにテンプレートを使用します
<ContentControl Background="Green" Template="{StaticResource TabContentPresenter}"/>
他のヒント
なぜなら TemplateBinding
DataTemplateでは動作しません。 詳細については、この質問を確認してください.
たとえそれが機能しても、必要なのは ControlTemplate データセテンプではありません。