标签: stackpanel

在WPF中构建可逆的StackPanel

我想构建一个StackPanel带有ReverseOrder属性的自定义,我可以声明性地将其设置为true,以使StackPanel中的元素以正常的相反顺序出现(例如从下到上或从右到左).它需要在运行中可逆.

我正在考虑从StackPanel派生一个新类,但我需要知道要覆盖哪些方法.

最终解决方案

protected override System.Windows.Size ArrangeOverride( System.Windows.Size arrangeSize ) {
    double x = 0;
    double y = 0;

    IEnumerable<UIElement> children = ReverseOrder ? InternalChildren.Cast<UIElement>().Reverse<UIElement>() : InternalChildren.Cast<UIElement>();
    foreach ( UIElement child in children ) {
        var size = child.DesiredSize;
        child.Arrange( new Rect( new Point( x, y ), size ) );

        if ( Orientation == Orientation.Horizontal )
            x += size.Width;
        else
            y += size.Height;
    }

    if ( Orientation == Orientation.Horizontal )
        return new Size( x, arrangeSize.Height ); …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf stackpanel

9
推荐指数
1
解决办法
2930
查看次数

堆栈面板或网格哪一个是最可取的

我听说带有Stack面板的UI设计比Grids更具推广性.那是否存在任何事实.我通常使用Grid来设计我的UI,最近在一个文档中我读到Grid需要更多的时间来渲染而不是堆栈面板; 所以我对此非常困惑..请给我更多关于此的信息......(WP7开发)

.net silverlight stackpanel windows-phone-7

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

水平堆栈面板中的两排?(WPF)

我有这个堆栈面板(包含四个分数):

在此输入图像描述

(分数只是带有新行和连字符的文本.)如果我添加第五个分数,它将转到10/12的右边,而不是形成第二行.

如何配置我的StackPanel以使其溢出到第二行(并保持在StackPanel的范围内)而不是无形地溢出?

标记:

<StackPanel Name="_fractionContainer" Width="700" Height="600"
      Orientation="Horizontal" Margin="8, 8, 8, 8" Background="White" />  
Run Code Online (Sandbox Code Playgroud)

wpf containers stackpanel

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

Silverlight:Canvas溢出

我创建了一个Canvas,在其中我放置了一个StackPanel.StackPanel是水平的,它接受一个缩略图像列表.画布有固定的大小.当我放置比Canvas宽度更多的缩略图时,StackPanel应该从Canvas溢出,所以我可以移动它以使当前缩略图居中.

一切正常,只有StackPanel的溢出是可见的!有没有办法隐藏它?或者整个方法是错误的?

这是一个截图.画布是红色框.stackpanel是蓝色半透明的.

http://www.netpalantir.it/static/sl_canvas_overflows.jpg

谢谢!

silverlight canvas clipping overflow stackpanel

8
推荐指数
1
解决办法
4169
查看次数

如何获取StackPanel中元素的位置?

假设我有一个动态填充副本的StackPanel,更改其中元素的Y位置.我在StackPanel中有一个特定元素,我希望在StackPanel重新定位其所有子节点后找到(相对于StackPanel或其他方式)的Y位置.

StackPanel sp = new StackPanel();
sp.Children.Add(someTextBlock);
sp.Children.Add(element1);
sp.Children.Add(element2);
...
someTextBlock.Text = "Lorem ipsum dolor..." // some text that pushes children of > index down
// element1 got pushed down to some unknown position based on text length
// now want to find the Y position of element1
Run Code Online (Sandbox Code Playgroud)

我注意到这样的方法:http://forums.silverlight.net/forums/p/16787/55881.aspx#55881不起作用,因为返回的位置是StackPanel的位置而不是子元素我是定位.

c# silverlight stackpanel

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

WPF - 如何在任何时候只扩展一个扩展器

我有一个带有一组扩展器的StackPanel,如何设置它以便任何时候只展开扩展器?

干杯

AW

wpf expander stackpanel

8
推荐指数
1
解决办法
8986
查看次数

为什么WPF进度条不适合?

这是我的原始代码:

<StackPanel Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal">
        <ProgressBar Height="23" Name="searchProgressBar" Foreground="Blue" BorderBrush="#00000000" BorderThickness="1" VerticalAlignment="Top" HorizontalAlignment="Stretch"/>
        <TextBlock Text="asdf" Height="23"  Name="progressTextBlock" VerticalAlignment="Top" Foreground="Red" HorizontalAlignment="Right"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

进度条非常小,可能是2或3像素宽,然后是文本块和空白区域.所以我尝试将元素明确地对接到两侧:

<DockPanel Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" >
            <ProgressBar DockPanel.Dock="Left" Height="23" Name="searchProgressBar" Foreground="Blue" BorderBrush="#00000000" BorderThickness="1" VerticalAlignment="Top" />
            <TextBlock DockPanel.Dock="Right" Text="asdf" Height="23"  Name="progressTextBlock" VerticalAlignment="Top" Foreground="Red" HorizontalAlignment="Right"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

徒劳无功.我也尝试通过设置HorizontalAlignment="Stretch"进度条修改每个解决方案,但没有变化.在渲染文本块后,如何拉伸它以填充所有空间?

wpf alignment stackpanel

8
推荐指数
1
解决办法
7137
查看次数

如何在网格上拉伸按钮,xaml

我在整个网格上拉伸按钮时遇到问题.

我的代码看起来像这样:

<Grid x:Name="LayoutRoot" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="2*"/>
        <RowDefinition Height="8*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="5" Grid.Row="1" Width="Auto" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Button Content="Search" Background="#FF13D38D" Click="searchButton_Click" FontSize="48"/>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用,并在整个网格上拉伸按钮,我尝试了maxwidth/maxheight但它也没有正常工作任何人都有想法?

xaml stackpanel wpf-grid

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

WPF StackPanel内容垂直对齐

有没有办法XAML说我想垂直对齐水平方向内的所有组件StackPanel

我通过以下方式实现了预期的结果XAML:

<StackPanel Orientation="Horizontal">
     <TextBlock VerticalAlignment="Center"/>
     <Button VerticalAlignment="Center"/>
     <TextBox VerticalAlignment="Center"/>
     <Button VerticalAlignment="Center"/>
     <TextBlock VerticalAlignment="Center"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

但我需要分别重复VerticalAlignment="Center"每个控件.

有没有办法在StackPanel下面的级别声明?

<StackPanel Orientation="Horizontal" VERTICALCONTENTALIGNMENT="Center">
     <TextBlock/>
     <Button/>
     <TextBox/>
     <Button/>
     <TextBlock/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

wpf xaml alignment stackpanel

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

WPF StackPanel PNG捕获无法正确呈现

我正在尝试创建一个png捕获StackPanel,但是当我保存时,我得到一个扭曲的视图,其中所有内容都是黑色矩形,并且大小不正确.图像保存中的宽度和高度是正确的,但是所有内容都被强制到顶部并挤压在一起

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Views="clr-namespace:POExpress.Views" x:Class="POExpress.MainWindow"
Title="My Window" Height="500" MinWidth="1000" Width="1000">
<Grid>
    <TabControl>
        <TabItem Header="My Epics">
            <Grid Background="#FFE5E5E5">
                <Border Margin="0,52,0,0" BorderThickness="1" BorderBrush="Black">
                    <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                        <StackPanel x:Name="sp_ports" Orientation="Vertical"/>
                    </ScrollViewer>
                </Border>
                <Button x:Name="btn_capture" Content="Save to png" Margin="0,10,114,0" VerticalAlignment="Top" Height="31" Background="White" HorizontalAlignment="Right" Width="99" Click="Btn_capture_Click"/>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)

public RenderTargetBitmap GetImage()
{
    Size size = new Size(sp_ports.ActualWidth, sp_ports.ActualHeight);
    if (size.IsEmpty)
        return null;

    RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32);

    DrawingVisual drawingvisual = new DrawingVisual();
    using (DrawingContext context = …
Run Code Online (Sandbox Code Playgroud)

c# wpf stackpanel

8
推荐指数
1
解决办法
315
查看次数