1

我在这里写下来是因为我对这件事有很多问题,我希望你能帮助我:P

我想创建一个适合其所有儿童宽度的动态 StackPanel。我给你举个例子。

假设我的 StackPanel 目前是空的。它的宽度将是 10 (fe),其固定高度是 30。然后我想添加一个图像,我把它写下来:

BitmapImage myImage = new BitmapImage(new Uri("[PATH]"));
Image realImage = new Image();
realImage.Source = myImage;
realImage.Width = 50;
realImage.Height = myImage.Height;
myStackPanel.Children.Add(realImage);

StackPanel 并没有放大到 50px;它被固定在 10 像素,切割我的图像。当我尝试添加其他 UI 元素(如 TextBlocks 等)时也会发生同样的情况。

我试图做类似的事情

myStackPanel.Width += realImage.Width;

但是当然没有用。我试图将 StackPanel 的宽度设置为“自动”,但它也没有帮助。这是 XAML 中的 StackPanel 声明:

<Window x:Name="MainWindow1" x:Class="Proj.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="myTitle" Height="480" Width="640"
    Loaded="onLoad" Background="Black" MinHeight="480" MinWidth="640">
    <Grid>
        ...(Other Closed Tags)...
        <StackPanel Orientation="Horizontal" Name="myStackPanel" Height="30" Margin="135,283,458,147"/>
    </Grid>
</Window>

我需要一个 StackPanel,因为我必须显示一个动态栏,其中包含可变数量的对象,这些对象将在屏幕上执行选取框效果,从右向左滑动。我既不知道对象的数量,也不知道动态条的最终宽度。

当然,如果您知道还有其他方法可以做到这一点,我会很高兴了解它:)

谢谢!

4

2 回答 2

2

将您的堆栈面板放入 ScrollViewer 并将其宽度设置为 Auto:

    <ScrollViewer HorizontalScrollBarVisibility="Auto">
        <StackPanel  Width="Auto">
            ....
        </StackPanel>
    </ScrollViewer>
于 2013-09-24T15:22:39.427 回答
1

我刚刚检查过,是的,你的问题是Margin。不要Margin用于布局中的绝对定位。Margin应该用作距父控件的边距偏移量,但在尝试定位元素(例如将项目放置在表单的中心)时应避免使用,因为它将元素剪辑到特定的边界。

你想要的效果很容易用一个auto宽度来实现StackPanel

<StackPanel Orientation="Horizontal" Name="myStackPanel" Height="30">
        <Button>Hello</Button>
        <Button>World</Button>
</StackPanel>

显然 - 如果您需要将其放置在窗口中的特定位置,您需要确保它具有可用的完整容器宽度 - 使用HorizontalAlignmentGrid放置您的控件

从您的布局中,我建议更像这样:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1.4*"></RowDefinition>
        <RowDefinition Height="30"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Grid.Row="1" Name="myStackPanel">
        <Button>Hello</Button>
        <Button>World</Button>
    </StackPanel>
</Grid>

除非绝对必要,否则我会避免给元素显式大小-如果您的父容器可以指定大小,那就更好了

如果您希望图像在 中水平对齐StackPanel,您可以设置HorizontalAlignmentCenter

于 2013-09-24T16:21:17.623 回答