سؤال

جديد على WPF ولديه علامات تبويب وفي كل علامة تبويب يتم تقديم المحتوى في لوحة الزاوية المنحنية/نافذة/WhateveryOuNACallit. لم أكن متأكدًا من كيفية القيام بذلك (النمط ، 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>

كما ترون مع خاصية الخلفية ، لا يمكنني ضبط لون الخلفية على المحتوى ولكن لا أعرف كيف. أنا هنا استخدمه.

<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 وأضعه أيضًا داخل نمط. هذا يحل مشكلة الخلفية ولكنه يخلق مشكلة أكبر. الآن لن يظهر المحتوى. قرأت على مدونة هنا أن وضع هدف الهدف يحل هذا لكنه لم يحل مشكلتي. يبدو الرمز هكذا الآن ، كما غير المحتوى 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>
هل كانت مفيدة؟

المحلول

استخدم 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 وليس datatemplate.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top