首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“汽车”的MaxWidth?

“汽车”的MaxWidth?
EN

Stack Overflow用户
提问于 2017-01-23 15:52:44
回答 2查看 1.1K关注 0票数 1

我试图创建一个网格来处理不同大小的屏幕。我的代码当前如下所示:

代码语言:javascript
运行
复制
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0" ... />
    <TextBlock Grid.Column="1" ... />
</Grid>

这不能正常工作,因为当我处于全屏时,第一列末尾有一个巨大的空空间,并且我希望每一列中的文本都是相邻的。但是,当我缩小/调整屏幕大小时,它确实正确地收缩了第一列。

我还尝试使用这样的代码:

代码语言:javascript
运行
复制
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0" ... />
    <TextBlock Grid.Column="1" ... />
</Grid>

当应用程序是全屏时,这段代码看起来很完美,但是当我缩小/调整屏幕大小时,第一列将不会收缩以适合。它使我的网格保持相同的大小,从而将我的文本从较小的屏幕上推开。

我怎样才能将宽度限制在“汽车”大小的范围内,并且仍然可以像“*”那样调整宽度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 07:43:21

我怎样才能将宽度限制在“汽车”大小的范围内,并且仍然可以像“*”那样调整宽度?

根据用XAML定义页面布局Auto表示列的大小将与其内容相匹配,*表示在计算Auto列之后,该列将获得部分剩余的宽度。

Width of ColumnDefinition不能设置为Auto*。但是,由于您的问题是当将Auto设置为两个ColumnDefinition时,它会将文本从较小的屏幕上推开,因此在这里我们可以使用AdaptiveTrigger。默认情况下,我们可以将Width设置为*,这可以确保调整大小不会切断文本。当窗口调整为不会导致文本被切断的较大大小时,AdaptiveTrigger可以帮助将Width属性从*更改为Auto。例如:

代码语言:javascript
运行
复制
<Grid
   Background="Azure"
   BorderBrush="Pink"
   BorderThickness="2">
   <Grid.ColumnDefinitions>
       <ColumnDefinition x:Name="col1" Width="*" />
       <ColumnDefinition Width="Auto" />
   </Grid.ColumnDefinitions>
   <TextBlock        
       Grid.Column="0"        
       Foreground="Blue"
       Text="layouttest1layouttest1layouttest1layou"
       TextWrapping="Wrap"  />
   <TextBlock     
       Grid.Column="1"           
       Foreground="Red"
       Text="layouttest2layouttest2layouttest2layouttest2layout"
       TextWrapping="Wrap" />
   <VisualStateManager.VisualStateGroups>
       <VisualStateGroup>
           <VisualState>
               <VisualState.StateTriggers>
                   <AdaptiveTrigger MinWindowWidth="600" />
               </VisualState.StateTriggers>
               <VisualState.Setters>
                   <Setter Target="col1.Width" Value="Auto" />
               </VisualState.Setters>
           </VisualState>
       </VisualStateGroup>
   </VisualStateManager.VisualStateGroups>
</Grid>

MinWindowWidth的值取决于TextBlock的总Width。更多细节请参考官方样品

更新代码如下,如果Width of TextBlock是动态的。

XAML码

代码语言:javascript
运行
复制
<Grid
    Background="Azure"
    BorderBrush="Pink"
    BorderThickness="2">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="col1" Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBlock        
        Grid.Column="0"  
        x:Name="txt1"
        Foreground="Blue"
        Text="layouttest1layouttest1layouttest1layou"
        TextWrapping="Wrap"  />
    <TextBlock     
        Grid.Column="1"           
        Foreground="Red"
        x:Name="txt2"
        Text="layouttest2layouttest2layouttest2layouttest2layout"
        TextWrapping="Wrap" />     
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState>
                <VisualState.StateTriggers>
                    <AdaptiveTrigger x:Name="adptivetrigger"   />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="col1.Width" Value="Auto" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

代码背后

代码语言:javascript
运行
复制
 private void Page_Loaded(object sender, RoutedEventArgs e)
 {
     var testwidth = txt1.ActualWidth + txt2.ActualWidth;
     adptivetrigger.MinWindowWidth = testwidth;          
 }
票数 1
EN

Stack Overflow用户

发布于 2017-01-24 04:50:33

你能试试这个吗?

代码语言:javascript
运行
复制
<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... HorizontalAlignment="Stretch"/>
<TextBlock Grid.Column="1" ... HorizontalAlignment="Stretch"/>

在这里,我刚刚添加了HorizontalAlignment=“拉伸”属性,它将对齐列中的文本块拉伸。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41810350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档