WPF,流体宽度和StackPanel或网格

时间:2015-05-07 14:48:59

标签: wpf xaml

我们有一个包含3列的WPF布局,我希望中心列是流动的,而out列是静态宽度。

中间列包含Textblock。当我将中心列设置为Width =“Auto”时,它仍然存在不是流体宽度的问题。

我的XAML目前位于下方,我附上了一张混合图片。中心Textblock应该是流畅的,但它似乎在它包裹之前在其他地方占用了一些宽度。我没有设置其他宽度。

<Grid Style="{DynamicResource showAttendeesItemGrid}" Margin="0" MinWidth="640">
 <Grid.ColumnDefinitions>
    <ColumnDefinition Width="300" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="220" />
</Grid.ColumnDefinitions>
        <Rectangle Grid.ColumnSpan="3" Style="{DynamicResource showAttendeesItemGridBackgroundRectangle}" MinWidth="640" RenderTransformOrigin="0.684,0.56"/>
        <StackPanel Grid.Column="0" x:Name="LeftPanel" Margin="10,0,0,0" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Left">
            <TextBlock x:Name="Title" TextWrapping="Wrap" Text="Non-Member Toddler" FontWeight="Bold" FontSize="26.667"/>
            <TextBlock x:Name="SubTitle" TextWrapping="Wrap" VerticalAlignment="Top" Text="Ages 0-3" FontFamily="Futura" FontSize="13.333" Margin="0,2,0,0" HorizontalAlignment="Left"/>
        </StackPanel>

        <TextBlock Grid.Column="1" x:Name="Description" TextWrapping="Wrap" FontSize="16" Margin="0,0,0,0" Visibility="Visible" Text="Max based on attendee selection: 1. this gets even long er now taht that shis is why what?" Height="50" MinWidth="50" MaxWidth="300"/>

        <StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right">                
             <TextBlock x:Name="Price" TextWrapping="Wrap" Text="$7.00" Margin="0" Foreground="Green" VerticalAlignment="Center" FontSize="24" Width="70" HorizontalAlignment="Left"/>
             <local:ucQuantityIncrementer Grid.Column="3" x:Name="Count" VerticalAlignment="Center" Margin="0" ButtonSize="33" NumberSize="34" FontSize="48" NumberBoxWidth="60" ButtonIconSize="32" HorizontalAlignment="Right" Width="140"/>           
        </StackPanel>


<!--
    <StackPanel Style="{DynamicResource showAttendeesItemContentStackPanel}" MaxWidth="1240" MinWidth="0" Width="640">

    </StackPanel>-->
    <Path x:Name="TopLine" Data="M368,17.7 L367,87.7" Margin="0,1,0,0" Stretch="Fill" Stroke="#FF898989" VerticalAlignment="Top" Height="1"/>
    <Path x:Name="BottomLine" Data="M368,17.7 L367,87.7" Margin="0,1,0,0" Stretch="Fill" Stroke="#FF898989" VerticalAlignment="Bottom" Height="1"/>

</Grid>

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要删除MaxWidth属性。

答案 1 :(得分:1)

宽度Auto表示&#34;将此列的大小调整为此列的子项所需的大小&#34;。由于您的TextBlock的MaxWidth为300,因此该列的子列所需的大小为300,因此该列的大小将为该列的大小。

宽度*表示&#34;调整此列的大小以占用所有可用空间,按比例分配所有其他星号列&#34;。由于您只有1个星大小的列,因此中间列将占用所有可用空间。

 <Grid.ColumnDefinitions>
    <ColumnDefinition Width="300" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="220" />
 </Grid.ColumnDefinitions>