我在这里写下因为我对这件事情有很多疑问,我希望你能帮助我:P
我想创建一个适合其所有Children宽度的动态StackPanel。我会以你为榜样。
假设我的StackPanel目前是空的。它的宽度为10(f.e.),其固定高度为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;它坚持10px,削减了我的形象。当我尝试添加其他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,因为我必须显示一个动态条,其中包含可变数量的对象,这些对象将在屏幕上执行选取框效果,从右向左滑动。我既不知道对象的数量,也不知道动态条的最终宽度。
当然,如果您知道还有其他方法可以做到这一点,我会很高兴了解它:)
谢谢!
答案 0 :(得分:2)
将您的stackpanel放入ScrollViewer并将其宽度设置为Auto:
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel Width="Auto">
....
</StackPanel>
</ScrollViewer>
答案 1 :(得分:1)
我刚检查过,是的,您的问题是Margin
。不要在布局中使用Margin
进行绝对定位。 Margin
应该用作父控件的边距偏移量,但在尝试定位元素(例如将项目放在窗体的中心)时应该避免,因为它会将元素剪切到特定边界。 / p>
使用auto
宽度StackPanel
<StackPanel Orientation="Horizontal" Name="myStackPanel" Height="30">
<Button>Hello</Button>
<Button>World</Button>
</StackPanel>
显然 - 如果您需要将其放置在窗口中的特定位置,则需要确保其具有可用的完整容器宽度 - 使用HorizontalAlignment
和Grid
来放置控件
从你的布局我会建议更像这样的东西:
<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
内水平对齐,可以将HorizontalAlignment
设置为Center