[英]Listbox in column auto grid exceed parent width in wpf
假設我有以下xaml:
<Grid MaxHeight="200" d:LayoutOverrides="Width">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ListBox Height="170" ScrollViewer.HorizontalScrollBarVisibility="Visible" ItemsSource="{Binding DataModel.LocalData.ListFabricRules}" IsEnabled="{Binding DataModel.LocalData.Enabled}" SelectedItem="{Binding DataModel.LocalData.ListFabricRulesSelected}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Descript}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Column="1" Orientation="Vertical" d:LayoutOverrides="Height" Margin="10,0" IsEnabled="{Binding DataModel.LocalData.EnabledRules}">
<Button Content="Test" />
</StackPanel>
</Grid>
布局的目標是使列表框填充可用空間(在列中),並且在列表框的右側有一個按鈕。 問題如下:當列表框顯示水平滾動時(因為包含的文本很大),其寬度增量會更改網格比例,因此按鈕向右移動,而不考慮邊距,並且比主網格占用更多的空間。 將主網格放在Scrollviewer中時,滾動會部分隱藏。 主網格的主機是usercontrol。
單擊此處,您可以看到圖像沒有列表框的水平滾動。 您可以滾動滾動查看器。在此捕獲中沒有問題
在此圖像中(水平)有大項目,因此列表框中的水平滾動是可見的。 在這種情況下,scrollviewer的滾動部分隱藏。 這是因為列表框具有更大的寬度。 我不知道為什么
這里的問題是,您沒有將列表框的寬度定義為“兩列均為自動”。 要解決此問題,必須使用*設置寬度的百分比,或者使用Max或MinWidth。
<Grid MaxHeight="200" d:LayoutOverrides="Width">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80*"/>
<ColumnDefinition Width="20*"/>
</Grid.ColumnDefinitions>
<ListBox Height="170" ScrollViewer.HorizontalScrollBarVisibility="Visible" ItemsSource="{Binding DataModel.LocalData.ListFabricRules}" IsEnabled="{Binding DataModel.LocalData.Enabled}" SelectedItem="{Binding DataModel.LocalData.ListFabricRulesSelected}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Descript}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Grid.Column="1" Orientation="Vertical" d:LayoutOverrides="Height" Margin="10,0" IsEnabled="{Binding DataModel.LocalData.EnabledRules}">
<Button Content="Test" />
</StackPanel>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.