【问题标题】:WPF layout: elements growing, but not shrinking correctlyWPF 布局:元素增长,但未正确缩小
【发布时间】:2013-04-30 16:14:15
【问题描述】:

我有以下 XAML 代码(也填充了一些虚拟内容来演示问题):

<Window x:Class="WpfWatchBird.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="378" Width="728"
        Name="frmMainList">
    <Grid Name="grdMainLayout">
        <ListBox Name="lstData" SelectionChanged="lstData_SelectionChanged" HorizontalAlignment="Stretch">
            <ListBoxItem HorizontalContentAlignment="Stretch">
                <ListBoxItem.Content>
                    <Grid HorizontalAlignment="Stretch">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="25"/>
                            <RowDefinition Height="100"/>
                            <RowDefinition Height="25"/>
                        </Grid.RowDefinitions>

                        <Label Content="nick" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Teal" Grid.Column="0" Grid.Row="0" Margin="0" Padding="0"/>
                        <Label Content="kategória" VerticalAlignment="Center" Foreground="Green" Grid.Column="1" Grid.Row="0" Margin="10,0,0,0" Padding="0"/>
                        <Label Content="stav záznamu" Foreground="Gray" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0" Padding="0" Grid.Column="2" Grid.Row="0"/>
                        <Label Content="1.1. 2013 12:00" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,5,0" Padding="0" Grid.Column="3" Grid.Row="0"/>

                        <Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="1" Source="http://www.birdz.sk/la/bezfotky.gif" />
                        <StackPanel x:Name="spItemText" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" HorizontalAlignment="Stretch">
                            <TextBlock MaxWidth="{Binding ElementName=spItemText,Path=ActualWidth}" FontSize="18" TextWrapping="Wrap">
                                <TextBlock.Text>Nadpis blogu, konečne, dámy a páni :)</TextBlock.Text>
                            </TextBlock>
                            <TextBlock HorizontalAlignment="Stretch" xml:space="preserve" TextWrapping="Wrap" Margin="10,0,0,0" 
                                       Padding="0" VerticalAlignment="Top"
                                       MaxWidth="{Binding ElementName=spItemText, Path=ActualWidth}">
                                <TextBlock.Text>Preview textu blogu, blablabla, blabla, bude to pekné a krásne
a bude to vedieť robiť aj newliny, len ešte nejak spraviť zarovnanie, aby nebolo... aha, ono nie je, on mi len kvôli xml:space preserve... A už mi aj krásne funguje textwrapping, keď som poodstraňoval zopár nepotrebných
...hmm... tak jeden riadok to wraplo dobre, ale ten ďalší už nie, zaujímavé...
                                </TextBlock.Text>
                            </TextBlock>
                        </StackPanel>
                        <Label Grid.Column="1" Grid.Row="2">
                            <Hyperlink>Otvor originál</Hyperlink>
                        </Label>
                        <Label Grid.Column="3" Grid.Row="2" HorizontalAlignment="Right">
                            <Hyperlink>Otvor zložku so zálohou</Hyperlink>
                        </Label>
                    </Grid>
                </ListBoxItem.Content>
            </ListBoxItem>
            <ListBoxItem Content="Menu 2" />
        </ListBox>
    </Grid>
</Window>

在扩大窗口时,它会正确调整大小,但在缩小时它会拒绝这样做。我找到了this question which seems very much related,但我不认为那里的答案是正确的答案(另外,我不能评论问题/答案,否则我会写在那里)。

“答案”说默认情况下 ItemsControls 是仅增长的,但“默认情况下”表明有一种方法可以覆盖它,但是答案没有解释这是如何完成的我找不到任何关于它的东西......有什么想法吗?我想用 XAML 来做,应该可以不用代码隐藏黑客,IMO...

【问题讨论】:

  • 尝试在列表框中设置ScrollViewer.HorizontalScrollBarVisibility="Disabled"
  • @XAMeLi 非常感谢您,先生,请您再写一遍,不要作为评论,而是作为答案,以便我将其标记为正确的?

标签: wpf xaml resize autoresize


【解决方案1】:

在列表框上设置ScrollViewer.HorizontalScrollBarVisibility="Disabled"

原因是滚动查看器(即ListBox 模板的一部分)会“更喜欢”打开水平滚动条而不是缩小内容。

【讨论】:

  • 伙计,我花了半天时间试图在 TreeViewItem 中溢出 TextBlock 文本,但没有成功。我什至不知道在网上搜索什么。我将ScrollViewer.HorizontalScrollBarVisibility 设置为Hidden 而不是Disabled...非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多