【问题标题】:TextBlock VS ContentPresenter, which one consumes more than the otherTextBlock VS ContentPresenter,一个比另一个消耗更多
【发布时间】:2023-04-25 08:27:01
【问题描述】:

我有一个 WPF 应用程序,我在其中使用大量使用 ControlTemplate 的对象集,代码如下:

    <ControlTemplate x:Name="ControlTemplate" TargetType="{x:Type graphsharp:VertexControl}">
               <Border x:Name="_border" CornerRadius="50" Width="60" Height="60" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                       <Border.Effect>
                            <DropShadowEffect BlurRadius="15" Direction="309" ShadowDepth="0" Color="#FF2B00FF" RenderingBias="Quality"/>
                       </Border.Effect>
                       <Border.Background>
                            <RadialGradientBrush GradientOrigin="0.231,0.889" RadiusX="0.517" RadiusY="0.517">
                                 <GradientStop Color="#CCD4D3FD" Offset="1"/>
                                 <GradientStop Color="Black"/>
                            </RadialGradientBrush>
                       </Border.Background>
                       <Border CornerRadius="50" Width="60" Height="60" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0" BorderThickness="0">
                            <Border.Background>
                                 <RadialGradientBrush RadiusY="0.939" RadiusX="0.982" GradientOrigin="-0.005,0.984" Center="0.417,0.539">
                                      <RadialGradientBrush.RelativeTransform>
                                            <TransformGroup>
                                                 <ScaleTransform CenterY="0.5" CenterX="0.5" ScaleY="1" ScaleX="1"/>
                                                 <SkewTransform AngleY="0" AngleX="0" CenterY="0.5" CenterX="0.5"/>
                                                 <RotateTransform Angle="181.901" CenterY="0.5" CenterX="0.5"/>
                                                 <TranslateTransform/>
                                            </TransformGroup>
                                      </RadialGradientBrush.RelativeTransform>
                                      <GradientStop Color="#34434343" Offset="0.56"/>
                                      <GradientStop Offset="1"/>
                                      <GradientStop Color="#40737373" Offset="0.543"/>
                                      <GradientStop/>
                                 </RadialGradientBrush>
                            </Border.Background>

                            <!--Here is the problem !! -->

                            <ContentPresenter Content="{TemplateBinding Vertex}" 
                                                ContentTemplate="{StaticResource VertexDataTemplate}"  VerticalAlignment="Center" HorizontalAlignment="Center">
                                 <ContentPresenter.Effect>
                                      <DropShadowEffect Color="White" BlurRadius="4" ShadowDepth="0"/>
                                 </ContentPresenter.Effect>
                            </ContentPresenter>

                            <!--Here is the problem !! -->

                      </Border>
                </Border>                        
</ControlTemplate>

我的问题是使用 ContentPresenter 或 TextBlock 更轻、更省钱?

【问题讨论】:

    标签: c# wpf xaml textblock contentpresenter


    【解决方案1】:

    我不熟悉 Graph#,所以这个答案假设 Vertex 是一个字符串。如果是这种情况,那么 TextBlock 将是一个更轻量级的控件。

    如果您将字符串放入内容展示器中(例如标签控件),它将自动在内容展示器内创建一个 TextBlock 来承载文本。如果您只是直接使用 TextBlock,那么它在树中就少了一项。

    【讨论】: