WPF Texblock na grade no ListView não dimensiona corretamente?
-
20-09-2019 - |
Pergunta
Eu tenho um bloco de texto que está em uma grade que é um itemtemplate para um ListView. Eu tenho os itens para que eles cresçam quando a janela é redimensionada, mas não consigo descobrir como fazer com que o bloco de texto seja limitado a esse tamanho. Eu tentei fazer isso com a largura da columnDefinition - se eu definir a largura como um número fixo (digamos 350), o texto envolve corretamente, mas obviamente o bloco de texto não se expande quando a janela é expandida - se eu definir o Largura para "*" O existe uma barra de rolagem horizontal e o texto sai para a direita e não envolve.
Alguma ideia do que estou fazendo de errado aqui?
<GroupBox Header="Urgent Items" Margin="8,8,8,340" Name="UrgetItemsGroupBox">
<Grid>
<ListView Margin="6" Name="CriticalErrorsListView" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=.}" MouseDoubleClick="CriticalErrorsListView_MouseDoubleClick">
<ListView.Background>
<LinearGradientBrush EndPoint="-0.192,0.529" StartPoint="0.998,0.519">
<GradientStop Color="#FFD2D2D2" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="1"/>
</LinearGradientBrush>
</ListView.Background>
<ListView.ItemTemplate>
<DataTemplate>
<Border Margin="2,2,2,3" BorderBrush="#FF847F6E" CornerRadius="10" BorderThickness="3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="75" />
</Grid.RowDefinitions>
<Image Grid.Row="0" Grid.RowSpan="5" Grid.Column="0" Margin="2,2,2,2" Source="Images\errorIcon.png" />
<TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" Margin="2,2,2,2" Text="{Binding Path=ApplicationName}" FontFamily="Calibri" FontWeight="Bold" FontSize="18" />
<TextBlock Grid.Row="1" Grid.Column="2" Margin="10,2,10,2" Text="{Binding Path=ErrorTime}" FontFamily="Calibri" FontSize="12" />
<TextBlock Grid.Row="2" Grid.Column="2" Margin="10,2,10,2" Text="{Binding Path=ErrorPerson}" FontFamily="Calibri" FontSize="12" />
<TextBlock Grid.Row="3" Grid.Column="2" Margin="2,2,2,2" Text="{Binding Path=ShortDescription}" TextWrapping="Wrap" />
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</GroupBox>
Solução
Você vê a barra de rolagem horizontal porque o ListView usa o ScrollViewer em seu modelo para permitir a rolagem. Tudo o que você precisa fazer é dizer ScrollViewer para não rolar horizontalmente. Apenas definido ScrollViewer.horizontalscrollBarvisibility = "desativado" no seu ListView. Então você terá algo assim:
<ListView Margin="6"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
Name="CriticalErrorsListView"
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Path=.}"
MouseDoubleClick="CriticalErrorsListView_MouseDoubleClick">
<!-- The rest goes here. -->
</ListView>
Espero que isto ajude.