【问题标题】:ContentControl and its children - Same size?ContentControl 及其子项 - 大小相同?
【发布时间】:2011-04-28 14:18:39
【问题描述】:

我想这是一个非常简单(阅读:非常简单)的问题,但我已经花了很长时间才弄清楚。

我有一个派生自 ContentControl 的类 PresentationItem。我在 Expression Blend 中工作,这会导致 PresentationItem 的高度和宽度出现问题。

当我插入一个 PresentationItem 时,它会自动调整太满的网格 (800x600)。然后,当我插入一个文本块时,文本块会变小。我认为这是正常和预期的行为。

我想要的是presentationitem 和Content 子项(例如,一个文本块)具有相同的大小。当我有几种不同的尺寸时,使用两种不同的尺寸很烦人。因此,presentationitem 中的内容应该被拉伸,或者presentationitem 应该调整大小以适应其子项。

(此外,不能选择使用 ContentControl 以外的东西)。

现在我有以下风格:

 <Style TargetType="local:JSLDPresentationItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:JSLDPresentationItem">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="PresentationStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.3"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="FocusedPresenting">
                                <Storyboard>
                                    <DoubleAnimation  Duration="0" To="1.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="LocalLayoutPanel" />
                                    <DoubleAnimation Duration="0" To="1.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="LocalLayoutPanel" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="AfterPresenting">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="LocalLayoutPanel" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="BeforePresenting">
                                <Storyboard>
                                    <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="LocalLayoutPanel" />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="UnfocusedPresenting"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>

                    <Grid x:Name="LocalLayoutPanel" Margin="0,0,0,0" VerticalAlignment="Top"   >

                        <Grid.RenderTransform>
                            <CompositeTransform/>
                        </Grid.RenderTransform>
                        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

要改变什么,在哪里改变?我猜它在正确的位置是一些“*”或“auto”!

【问题讨论】:

  • 看起来您需要覆盖 TextBlock 的默认水平和垂直对齐方式。例如,尝试将 作为内容而不是 TextBlock。它会扩展以填充内容演示者吗?

标签: c# wpf silverlight xaml expression-blend


【解决方案1】:

尝试将派生控件的 Horizo​​ntalContentAlignment 和 VerticalContentAlignment 设置为 Stretch。

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多