質問

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 データセテンプではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top