标签: stackpanel

如何获得堆栈面板的实际当前高度?

你好,

我想在 WPF 中制作一个自定义的堆栈面板,它会根据面板的高度自动将他的孩子调整到一定的大小。但是面板高度是动态的,因为它延伸到他的父母。当我想获得高度时(我尝试了所有可能性,请参阅代码),它始终为 0 或未定义,尽管在构建解决方案中它绝对不是 0。这是代码:

XAML:

<my:AutoSizeButtonStackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

代码隐藏:

public class AutoSizeButtonStackPanel : StackPanel
{
    public void AddChild(Button newButton)
    {
        double getPanelHeight;
        getPanelHeight = this.ActualHeight; //is 0
        getPanelHeight = this.ViewportHeight; //is 0
        getPanelHeight = this.Height; //is n. def.
        getPanelHeight = this.DesiredSize.Height; //is 0
        getPanelHeight = this.RenderSize.Height; //is 0

        newButton.Height = getPanelHeight / 2;

        this.Children.Add(newButton);
    }
}
Run Code Online (Sandbox Code Playgroud)

wpf xaml panel stackpanel

3
推荐指数
1
解决办法
3494
查看次数

WP7 - 进度条

使用Blend构建ProgressBar的最佳方法是什么?

现在我有

LayoutRoot > Panorama > PanoramaItem > ListBox

我希望在ListBox后面有一个进度条,并在我的Web请求完成时隐藏它.那么,我应该将ListBox和ProgressBar放入StackPanel吗?或者我应该以编程方式添加或删除ListBox/ProgressBar?

我只想以最好的方式做到这一点.我找到的大多数教程都是针对位于固定高度区域下方的进度条,并在加载完成时隐藏.

c# stackpanel windows-phone-7 progress-bar

3
推荐指数
1
解决办法
3089
查看次数

堆栈面板的水平滚动不起作用

我尝试创建一个可滚动的水平 StackPanel 但我没有成功...

目前,我的 StackPanel 的auto宽度(问题可能出在这里)包含一些项目,例如grids.

现在,如果我的所有网格在 StackPanel 中都不可见(宽度太短),我将无法滚动。我已经尝试将 StackPanel 放在 a 中,ScrollViewer但它也不起作用。

我怎样才能解决这个问题?

编辑这里是我的代码:

    <StackPanel Height="85" Margin="0,0,200,15" VerticalAlignment="Bottom">
        <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Left" Height="85" CanContentScroll="True">
            <StackPanel x:Name="Film" Height="85" Width="Auto" Margin="0,0,0,0" Orientation="Horizontal" ScrollViewer.HorizontalScrollBarVisibility="Visible" CanHorizontallyScroll="True" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="True" d:LayoutOverrides="TopPosition, BottomPosition">
                <StackPanel.Background>
                    <SolidColorBrush Color="{DynamicResource ButtonBackground}"/>
                </StackPanel.Background>
                <Grid Width="100" Background="Red"/>
                <Grid Width="100" Background="#FFFF0051"/>
                <Grid Width="100" Background="#FFB900FF"/>
                <Grid Width="100" Background="#FF002EFF"/>
                <Grid Width="100" Background="#FF00FFDC"/>
                <Grid Width="100" Background="#FF51FF00"/>
                <Grid Width="100" Background="Red"/>
            </StackPanel>
        </ScrollViewer>
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

.net c# wpf scroll stackpanel

3
推荐指数
1
解决办法
2504
查看次数

有没有比网格更好的方法来排列WPF中的控件?

我使用网格来定义这个问题中定义的适当性Grid vs. Stackpanel.但是,在处理网格时,您必须在网格中明确定义控件位置.当必须重新排序控件或向网格添加新控件时,这会变得很麻烦.以提供的代码为例,有没有办法让文本和文本框的行和列排成一行,以便以后轻松修改或扩展?

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="3*"/>
        <ColumnDefinition Width="7*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <TextBlock Text="Value One:"   Grid.Row="0" Grid.Column="0"/>
        <TextBox x:Name="TextBoxOne"   Grid.Row="0" Grid.Column="1"/>

    <TextBlock Text="Value Two:"   Grid.Row="1" Grid.Column="0"/>
        <TextBox x:Name="TextBoxTwo"   Grid.Row="1" Grid.Column="1"/>

    <TextBlock Text="Value Three:" Grid.Row="2" Grid.Column="0"/>
        <TextBox x:Name="TextBoxThree" Grid.Row="2" Grid.Column="1"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

wpf grid stackpanel

2
推荐指数
1
解决办法
346
查看次数

列表未填充"堆栈"面板中的最大空间

我有以下代码,我认为List应该填写堆栈面板占用的整个空间,我尝试使用Grid但它没有用.

<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" DockPanel.Dock="Top">
        <ListBox x:Name="substanceList" ItemsSource="{Binding Source={StaticResource symTable}}" DockPanel.Dock="Top" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Name, Mode=TwoWay}" VerticalAlignment="Center"/>
                        <TextBox Text="{Binding Count,  Converter={StaticResource stringToIntConverter}, Mode=TwoWay}" VerticalAlignment="Center" BorderThickness="0"/>
                        <Separator/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button x:Name="graphButtonStackPanel" Content="Graph" Click="graphButtonStackPanel_Click" DockPanel.Dock="Top" HorizontalAlignment="Right"/>
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

wpf listbox panel stackpanel

2
推荐指数
1
解决办法
1435
查看次数

从stackpanel中删除元素

我有一个按钮,按下它时会将一个文本框和一个列表框添加到堆栈面板,并将此堆栈面板添加到另一个名为"stackPanelAdd"的堆栈面板中.像这样:

private void buttonAdd_Click(object sender, RoutedEventArgs e)
{
    StackPanel sp = new StackPanel();
    TextBox tb = new TextBox();   
    ListBox lb = new ListBox();

    tb.Margin = new Thickness(5, 5, 5, 0);
    lb.Margin = new Thickness(5, 5, 5, 0);
    lb.Height = 200;

    sp.Children.Add(tb);
    sp.Children.Add(lb);

    stackPanelAdd.Children.Add(sp);
}
Run Code Online (Sandbox Code Playgroud)

如何删除stackpanel"stackPanelAdd"中的最后一个子节点?我应该使用像stackPanelAdd.children.Remove这样的东西吗?如果是这样,那么我如何获得stackpanel中的最后一个元素?

c# wpf stackpanel

2
推荐指数
1
解决办法
1万
查看次数

"元素已经是另一个元素的孩子."

起初,这个例外对我来说并没有多大意义.为什么我不能多次复制这个对象?但那不是重点:

我用一个清单.每当我导航到一个网站,它应该这样做:

 (App.Current as App).recent.ForEach(x => container.Children.Add(x));
Run Code Online (Sandbox Code Playgroud)

(container =另一个StackPanel)

第一次,它的工作原理.之后,我得到了问题标题中显示的异常.我已经尝试使用列表框,但我刚收到一个ArgumentException.我认为这些例外具有相同的来源,但我不知道我做错了什么.请帮忙

谢谢

c# stackpanel windows-phone-7

2
推荐指数
1
解决办法
9819
查看次数

StackPanel 逆序 - WPF

我试图颠倒孩子在 StackPanel 中出现的顺序。我希望能够将新子项(在运行应用程序时)添加到列表的顶部而不是底部。我曾尝试使用各种 XAML 代码,但没有任何效果。

什么是最简单的方法来做到这一点?

c# wpf stackpanel

2
推荐指数
1
解决办法
2572
查看次数

一侧有一个按钮,StackPanel另一侧有其他按钮

我正在研究WPF应用程序.StackPanel我的xaml文件中有一个.在StackPanel中有三个按钮.问题是所有按钮都在左侧或右侧.我想要的是一个按钮是左侧的一个按钮和右侧的两个按钮.

<StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" >
    <Button Content="Open"/>
    <Button Content="Close"/>
    <Button Content="Help"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

这样的输出是这样的. 产量

你可以看到左侧有很多空间.我希望我的帮助按钮位于极左侧,最右侧是关闭和打开.我想我可以通过实现一个网格或类似的东西来做到这一点,但我想问我是否可以只使用堆栈面板来做到这一点.

c# wpf xaml stackpanel

2
推荐指数
1
解决办法
1116
查看次数

在Windows Phone 8中使StackPanel可滚动

我有一个控件列表,放入stackpanel.这些控件是Hubtiles,在用户创建后以编程方式添加 - 本质上是一个列表.我需要制作添加它们的StackPanel,可滚动 - 对此最好的方法是什么?我应该将堆栈面板放在ScrollView中,然后使用Hubtile的实际高度增加StackPanels高度 - 使其可滚动,但不是这样,用户可以在没有任何东西的情况下滚动无限.因此,只要StackPanel内的控件数量达到3,它就会自动增加它的高度,如下所示:

只要StackPanel内的控件数量达到3或更高:

StackPanel.Height = StackPanel.Height + Hubtile.ActualHeight;
Run Code Online (Sandbox Code Playgroud)

非常感谢!

c# height stackpanel windows-phone windows-phone-8

2
推荐指数
1
解决办法
5714
查看次数