5

WPFの新機能であり、タブがあり、各タブのコンテンツは、湾曲したコーナーパネル/ウィンドウ/何でも表示されます。これを行う方法(Style、ControlTemplate)がわかりませんでしたが、DataTemplateを使用することにしました。

だから今私はこの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>

backgroundプロパティでわかるように、コンテンツに背景色を設定するつもりはありませんが、方法がわかりません。ここで使用します。

<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に変更し、スタイル内に配置しました。これはバックグラウンドの問題を解決しますが、より大きな問題を作成します。これで、コンテンツは表示されなくなります。私はここのブログでtargetTypeを置くことでこれが解決することを読みましたが、それは私の問題を解決しませんでした。コードは現在このようになっており、テンプレートの代わりにスタイルを使用するようにContentControlも変更されています。

<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>
4

2 に答える 2

8

DataTemplateの代わりに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の代わりにTemplateを使用する

<ContentControl  Background="Green" Template="{StaticResource  TabContentPresenter}"/>
于 2010-06-25T14:25:44.653 に答える
5

TemplateBindingが DataTemplate で動作しないことが原因である可能性があります。詳細については、この質問を確認してください

機能する場合でも、必要なのはControlTemplateであり、datatemplate ではありません。

于 2010-06-25T13:55:28.757 に答える