如何使子元素在WPF中的父元素限制?

时间:2011-07-07 13:26:40

标签: .net wpf inheritance width

我的StackPanel大于其父Grid。我确认使用Snoop WPF Spy。 Width已设置为默认值。如何限制它?

我不喜欢ViewBox解决方案,因为它缩小了我的文字,我希望它被包装/修剪。

按要求编辑 XAML

<Grid>
    <StackPanel
        Orientation="Horizontal">
        <Border
            BorderBrush="Black"
            BorderThickness="1"
            Width="{ Binding BorderScreenShot }"
            Margin="0,-8,0,0">
            <Image
                ToolTip="Some Text"
                Cursor="Hand"
                Source="{ Binding Image }"
                Stretch="Fill"
                Visibility="{ Binding ImageVisibility }"
                MouseLeftButtonUp="Image_MouseLeftButtonUp" />
        </Border>
        <StackPanel
            Orientation="Vertical"
            Margin="10,0,0,0">
            <TextBlock
                Text="{ Binding Name }"
                TextWrapping="Wrap" />
            <TextBlock
                Text="{ Binding LongText }"
                TextWrapping="Wrap" />
            <StackPanel
                Orientation="Horizontal">
                <TextBlock
                    Text="{ Binding Category }" />
                <TextBlock
                    Text="{ Binding Version }" />
            </StackPanel>
        </StackPanel>
    </StackPanel>
</Grid>

3 个答案:

答案 0 :(得分:7)

您可以尝试将StackPanel更改为DockPanel(对孩子们有适当的DockPanel.Dock属性)。

这将模仿StackPanel的效果,但允许对子项进行约束。

或者,使用WrapPanel而不是StackPanel。

StackPanels具有无限的客户端大小,因此如果没有设置显式维度,StackPanel内部的任何内容都不会包装或修剪(相反,StackPanel只会增长以适应内容)。

答案 1 :(得分:0)

子元素不可能大于它的父元素,除非它的内容更大。如果您想修剪文字,可以使用TextBlock.TextTrimming = WordEllipsis/CharacterEllipsis。如果我对问题的解释是正确的,这将产生所需的行为。

但是,StackPanel无法正常使用。如其他答案所示,您可以使用DockPanelGrid来安排内容。

或者,您可以将StackPanel包裹在ScrollViewer中并使用滚动条来处理溢出。

<强>更新 这应该解决它

    <DockPanel>
    <Border    
        DockPanel.Dock="Left"
        BorderBrush="Black"            
        BorderThickness="1"            
        Width="{ Binding BorderScreenShot }"           
        Margin="0,-8,0,0">
        <Image                ToolTip="Some Text"                Cursor="Hand"                Source="{ Binding Image }"                Stretch="Fill"                Visibility="{ Binding ImageVisibility }"                MouseLeftButtonUp="Image_MouseLeftButtonUp" />
    </Border>
    <StackPanel            
            DockPanel.Dock="Bottom"
            Orientation="Horizontal">
        <TextBlock                    Text="{ Binding Category }" />
        <TextBlock                    Text="{ Binding Version }" />
    </StackPanel>
    <TextBlock             
        DockPanel.Dock="Top"
        Text="{ Binding Name }"                
        TextWrapping="Wrap" />
    <TextBlock                
        Text="{ Binding LongText }"                
        TextTrimming="WordEllipsis"
        TextWrapping="Wrap" />
</DockPanel>

答案 2 :(得分:0)

如果您不想缩小内容,实际上没有任何其他方法可以限制它 - 特别是因为涉及图像。

这几乎让你留下ScrollViewer,这是专为这种情况而设计的。就个人而言,我喜欢将放大/缩小功能与ScrollViewer功能相结合。它为用户提供了查看内容的最佳选择。