Uwp 最大宽度为';自动';?
我正在尝试创建一个网格来处理不同大小的屏幕。我的代码当前如下所示:Uwp 最大宽度为';自动';?,uwp,uwp-xaml,Uwp,Uwp Xaml,我正在尝试创建一个网格来处理不同大小的屏幕。我的代码当前如下所示: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" ... /&g
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... />
<TextBlock Grid.Column="1" ... />
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... />
<TextBlock Grid.Column="1" ... />
</Grid>
这不能正常工作,因为当我全屏显示时,第一列的末尾有一个巨大的空白,我希望每列中的文本相邻。但是,当我收缩/调整屏幕大小时,它确实正确地收缩了第一列
我还尝试使用如下代码:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... />
<TextBlock Grid.Column="1" ... />
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... />
<TextBlock Grid.Column="1" ... />
</Grid>
当应用程序全屏显示时,此代码看起来非常完美,但当我缩小/调整屏幕大小时,第一列将不会缩小以适合。它使我的网格保持相同的大小,从而将我的文本从较小的屏幕上推出
如何将宽度限制在“Auto”的任何大小,并且仍然将其调整为“*”?您能试试这个吗
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" ... HorizontalAlignment="Stretch"/>
<TextBlock Grid.Column="1" ... HorizontalAlignment="Stretch"/>
在这里,我刚刚添加了HorizontalAlignment=“Stretch”属性,该属性将在列中对齐textblock Stretch
我如何将宽度限制为“Auto”的大小,并且仍然将其调整为“*”大小
根据,Auto
表示列的大小将适合其内容,*
表示在计算自动列后,列将获得剩余宽度的一部分
列定义的宽度
不能设置为自动
,也不能设置为*
。但由于您的问题是将Auto
同时设置为ColumnDefinition
,它会将您的文本从较小的屏幕上推出,因此我们可以在这里使用。默认情况下,我们可以将宽度设置为*
,这样可以确保调整大小不会切断文本。当窗口的大小调整到不会导致文本被截断的较大尺寸时,AdaptiveTrigger
可以帮助将Width
属性从*
更改为Auto
。例如:
<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>
代码隐藏
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var testwidth = txt1.ActualWidth + txt2.ActualWidth;
adptivetrigger.MinWindowWidth = testwidth;
}
无益。如果第一列只有少量文本,则每个文本块之间仍有间隙。如果有大量文本,则第一列将不会展开以适合文本,即使第二列末尾有一堆空白。是否要根据第一列包含的文本调整第一列的宽度?那么,如果第二列有一些文本,那么第二列会发生什么情况呢?我想让两列都像它们的宽度是自动的一样,但是当屏幕缩小或它们的组合文本太大时,只有第一列会缩小或有截断文本。第一列的TextBlock具有TextTrimming=“CharacterEllipsis”,以便在列太小时使其适合该列。这是因为第一列包含一个项目的描述,我可以排除其中的一部分,而第二列包含一个项目的当前状态,它不应该被隐藏或切断。我还需要消除这些文本块之间的任何间隙。更近,但您从哪里获得值MinWindowWidth=“600”?由于每个文本块的长度可能不同,我永远不知道*和Auto之间的确切翻转点。当第一列设置为“自动”时,我不需要“600”作为第一列的宽度吗?我不能将该值设置为第一列的MaxWidth并获得相同的结果吗?@TS,MinWindowWidth
是两个TextBlock
的摘要ActualWidth
。如果实际宽度是动态的,您可以计算它的代码并将其设置为触发器。我在回复中更新了代码,你可以参考。顺便说一句,如果我的回答对你有帮助,你能标记为接受吗?我已经得到了我想要的。。。虽然我最终放弃了经理。基本上我把你的代码放在后面,用它来设置“col1.MaxWidth”,而不是用它来设置“adptivetrigger.MinWindowWidth”。它仍然需要调整以使其与它所在的ItemsControl一起工作(可能使MaxWidth成为绑定),但这个概念是可靠的。非常感谢。