【问题标题】:Adjust the position of the button dynamically when StackPanel exceeds certain width当 StackPanel 超过一定宽度时动态调整按钮的位置
【发布时间】:2020-07-17 09:34:52
【问题描述】:

我需要调整网格内按钮的位置,该网格在 srollviewer 内有一个堆栈面板,这样每当滚动条出现时它应该在末尾,而当 ScrollBar 不可用时它应该在旁边最后一项。

With Horizontal Scroll Bar ,正如预期的那样,但在 Without Horizontal scroll Bar 按钮和最后一个文本框之间有间隙。如何在不影响 [With Horizo​​ntal Scroll Bar] 行为的情况下摆脱这种差距。

这里是sn-p使用的代码:

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp2"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Grid>
        <Grid.ColumnDefinitions >
            <ColumnDefinition Width="5*"  />
            <ColumnDefinition Width="6"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
            <StackPanel Orientation="Horizontal">
                <TextBox Text="TextBox1" VerticalContentAlignment="Center"></TextBox>
                <TextBox Text="TextBox2" VerticalContentAlignment="Center"></TextBox>
                <TextBox Text="TextBox3" VerticalContentAlignment="Center"></TextBox>
                <TextBox Text="TextBox4" VerticalContentAlignment="Center"></TextBox>
                <TextBox Text="TextBox5" VerticalContentAlignment="Center"></TextBox>
                <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                
            </StackPanel>
        </ScrollViewer>
        <Button Content="Button" Grid.Column="2"/>

    </Grid>
</Window>

【问题讨论】:

  • 使用您当前的 XAML。该按钮将始终水平保持在 ScrollViewer 旁边。那么你想要达到什么目的呢?不清楚..你能展示一些图片吗?
  • i.stack.imgur.com/0q4nM.png 在此图像中,最后一个文本框和按钮之间存在间隙。我想摆脱这个差距。我尝试将堆栈面板的宽度设为自动,但这没有帮助。
  • 因为这个&lt;ColumnDefinition Width="6"/&gt;
  • 此中间列占用空间。你可以删除它,或者让它的宽度Auto
  • 实际上文本框是在堆栈面板中动态添加的。我无法控制添加了多少文本框。在我发布的示例代码中,它只有 6 个。当文本框的数量增加时,如果我将宽度保持为自动,按钮就会消失。如果我将其设置为 * 那么,如果文本框的数量减少到 1/2,则再次出现间隙(没有额外的列定义)

标签: wpf scrollviewer stackpanel


【解决方案1】:

实现你想要的(粘性行为)。只需像这样在 XAML 中进行一些更改。

<Grid x:Name="ParentGrid">
    <Grid Grid.Column="0"  HorizontalAlignment="Left">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"  />
                <ColumnDefinition Width="Auto"  />
            </Grid.ColumnDefinitions>
            <ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Left">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <TextBox Text="TextBox1" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox2" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox3" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox4" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox5" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>
                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>

                    <TextBox Text="TextBox6" VerticalContentAlignment="Center"></TextBox>

        
                </StackPanel>
            </ScrollViewer>
            <Button Content="Button" Grid.Column="1" HorizontalAlignment="Left"/>

        </Grid>
    </Grid>   

一切正常。

【讨论】:

  • 感谢您的回复,但是当堆栈面板的内容增长时,按钮将被隐藏并且水平滚动条永远不会出现,因为宽度是自动的。
  • @Developer123 请检查更新的答案。它工作得很好..我不得不为你尝试很多:)
猜你喜欢
  • 2014-01-23
  • 2017-07-22
  • 1970-01-01
  • 2017-05-03
  • 2020-03-30
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多