标签: dockpanel

如何让StackPanel的孩子向下填充最大空间?

我只想在左边流动文本,在右边有一个帮助框.

帮助框应该一直延伸到底部.

如果您取出下面的外部StackPanel,它的效果很好.

但由于布局的原因(我正在动态插入UserControl),我需要包装StackPanel.

如何让GroupBox扩展到StackPanel的底部,你可以看到我已经尝试过:

  • VerticalAlignment = "弹力"
  • VerticalContentAlignment = "弹力"
  • 身高="自动"

XAML:

<Window x:Class="TestDynamic033.Test3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Test3" Height="300" Width="600">
    <StackPanel 
        VerticalAlignment="Stretch" 
        Height="Auto">

        <DockPanel 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch" 
            Height="Auto" 
            Margin="10">

            <GroupBox 
                DockPanel.Dock="Right" 
                Header="Help" 
                Width="100" 
                Background="Beige" 
                VerticalAlignment="Stretch" 
                VerticalContentAlignment="Stretch" 
                Height="Auto">
                <TextBlock Text="This is the help that is available on the news screen." TextWrapping="Wrap" />
            </GroupBox>

            <StackPanel DockPanel.Dock="Left" Margin="10" Width="Auto" HorizontalAlignment="Stretch">
                <TextBlock Text="Here is the news that should wrap around." TextWrapping="Wrap"/>
            </StackPanel>

        </DockPanel>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

回答:

谢谢Mark,使用DockPanel而不是StackPanel清理它.一般来说,我发现自己现在越来越多地使用DockPanel进行WPF布局,这里是固定的XAML:

<Window x:Class="TestDynamic033.Test3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Test3" Height="300" Width="600" MinWidth="500" …
Run Code Online (Sandbox Code Playgroud)

wpf xaml dockpanel autoresize autolayout

338
推荐指数
4
解决办法
33万
查看次数

WPF:如何在DockPanel中拉伸中间孩子?

我将一个DockPanel添加到RadioButton元素,这样我就可以使用100%的宽度水平分配单选按钮标签,文本框和按钮.

LastChildFill="True"在DockPanel中使用会拉伸最后一个元素.如果文本框是面板中的最后一个子项,这很好用.但是,由于按钮是最后一个元素并且具有固定宽度,因此应该拉伸文本框.但是,没有像这样的财产2ndChildFill="True".

我的代码看起来像这样:

    <RadioButton HorizontalAlignment="Stretch"
                                        HorizontalContentAlignment="Stretch">
        <DockPanel >
            <TextBlock VerticalAlignment="Center">in location:</TextBlock>
            <TextBox Grid.Column="1" Margin="10,0,0,0">Path string</TextBox>
            <Button HorizontalAlignment="Right" 
                    Margin="10,0,0,0" Padding="3,0">...</Button>
        </DockPanel>
    </RadioButton>
Run Code Online (Sandbox Code Playgroud)

它给了我这个:

wpf截图

任何想法,提示解决这个问题?提前谢谢了...

c# wpf xaml textbox dockpanel

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

如何以编程方式将新元素停靠到DockPanel

如何以编程方式创建基于UserControl的元素并将其停靠到DockPanel?

wpf user-controls dockpanel

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

WPF Dockpanel第一个孩子使用剩余空间

在一个窗口中,我有一个DockPanels 列表来指定几个文件.每个DockPanel都有一个TextBox(用于路径)和一个按钮(用于浏览文件).

我重新创建了一个简单的WPF页面来解决这里的问题:

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="150"
    Height="22">
    <DockPanel>
        <TextBox HorizontalAlignment="Stretch"/> <!-- path to file -->
        <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file -->
    </DockPanel>
</Page>
Run Code Online (Sandbox Code Playgroud)

问题是我希望按钮位于文本框的右侧,但这会导致文本框非常小,因为DockPanel的LastChild是用完剩余空间的按钮.香港专业教育学院试图改变它,通过改变他们周围和设置,LastChildFill="False"但这只会导致按钮再次变小,而不是使文本框宽(甚至与HorizontalAlignment="Stretch").

我想按顺序控制的原因是我希望用户在使用tab窗口导航时到达Button之前的TextBox .我调查了设置,TabIndex但感觉很讨厌,WPF最喜欢的功能是tabindex的顺序是在XAML中定义的conrols.更不用说我可能不得不在Window中的所有内容上手动设置TabIndex.

对我来说,似乎不遵守TextBox.Horizo​​ntalAlignment的设置.如何让第一个控件尽可能多地使用空间但仍保留Tab键顺序?

wpf xaml dockpanel

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

如何使DockPanel填充可用空间

我正在尝试购物车的内容ItemsControl(ListBox).为此,我创建了以下内容DataTemplate:

<DataTemplate x:Key="Templates.ShoppingCartProduct"
              DataType="{x:Type viewModel:ProductViewModel}">
    <DockPanel HorizontalAlignment="Stretch">
        <TextBlock DockPanel.Dock="Left"
                   Text="{Binding Path=Name}"
                   FontSize="10"
                   Foreground="Black" />
        <TextBlock DockPanel.Dock="Right"
                   Text="{Binding Path=Price, StringFormat=\{0:C\}}"
                   FontSize="10"
                   Foreground="Black" />
    </DockPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

然而,当物品显示在我的购物车中时,名称和价格TextBlocks正好位于彼此旁边,并且右侧有非常大量的空白.

想知道什么是强迫DockPanel伸展以填充所有可用空间的最佳方法ListItem

.net wpf autosize dockpanel

18
推荐指数
3
解决办法
5万
查看次数

DockPanel Tab顺序

我在ItemsControl的DataTemplate中设置了DockPanel,如下所示:

<ItemsControl HorizontalContentAlignment="Stretch">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DockPanel>
        <ComboBox DockPanel.Dock="Left"/>
        <ComboBox DockPanel.Dock="Left"/>
        <Button DockPanel.Dock="Right">Button</Button>
        <!-- This will appear before the button...it has to go after it in the XAML so it will fill properly in the DockPanel -->
        <TextBox DockPanel.Dock="Left" MinWidth="100" HorizontalAlignment="Stretch"/>
      </DockPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

我希望文本框填充组合框和按钮之间的所有剩余空间.我不得不把文本框放在XAML的最后,因为DockPanel只会填充最后一个孩子.看起来不错; 但是,标签顺序现在搞砸了.它现在选中了combobox-combobox-button-textbox而不是combobox-combobox-textbox-button.

我尝试KeyboardNavigation.TabIndex在每个项目上使用属性,但由于这是ItemsControl的DataTemplate(每个dockpanels将用于单独的项目),这使得Tab键顺序垂直向下跳转到每个项目的组合框,然后垂直向下移动每个文本框,然后垂直向下按下每个按钮,而不是跨越每一行的所需行为,然后向下.

示例UI:

[Combo11] [Combo12] [Text1] [Button1]
[Combo21] [Combo22] [Text2] [Button2]
Run Code Online (Sandbox Code Playgroud)

在目前的情况下,它会发生Combo11,Combo12,Button1,Text1,Combo21,Combo22,Button2,Text2.如果我添加TabOrder属性,它会去Combo11,Combo21,Combo12,Combo22,Text1,Text2,Button1,Button2.

我想要它去Combo11,Combo12,Text1,Button1,Combo21,Combo22,Text2,Button2.

有没有人对如何解决这个UI问题有任何想法?

wpf user-interface dockpanel tabindex ui-design

16
推荐指数
2
解决办法
3827
查看次数

为什么DockPanel.Dock ="Bottom"将元素放在顶部?

以下代码将两个文本元素放在顶部,即使第二个文本元素标记为"Bottom".背景颜色一直到底部,所以DockPanel似乎伸展到底部.

我对DockPanel的理解是什么?

<Window x:Class="TestIndexer934.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:TestIndexer934.Commands"
    Title="Main Window" Height="400" Width="800">
    <DockPanel HorizontalAlignment="Left" Background="Beige">
        <TextBlock DockPanel.Dock="Top" Text="Testing top"/>
        <TextBlock DockPanel.Dock="Bottom" Text="Testing bottom"/>
    </DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

wpf xaml dockpanel

14
推荐指数
1
解决办法
8985
查看次数

如何让Silverlight 4 Tools在Web Developer 2010 Express中运行?

我安装了Windows 7.

然后,我从此处使用Web Platform Installer安装了Web Developer 2010 Express .

然后我从这里安装了Silverlight 4 Toolkit4月15日版本.

然后我添加了这个参考:

替代文字http://www.deviantsart.com/upload/ijk0lm.png

然后在我的XAML中,我像这样引用它,但它没有给我智能感知并且告诉我我缺少一个程序集引用:

替代文字http://www.deviantsart.com/upload/cd4vrj.png

更新:

xmlns:tk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
Run Code Online (Sandbox Code Playgroud)

即使在重建之后也不起作用

在Web Developer 2010 Express中使用Silverlight 4 Toolkit需要做什么?

附录:

所以我在另一台计算机上用Web Developer Express 2008中的Silverlight 3再次测试它,它确实按照我记忆的方式工作,所以为什么它不能在Silverlight 4中以这种方式工作,我需要更改才能获得它上班?:

替代文字http://www.deviantsart.com/upload/14eo9k7.jpg

wrappanel visual-studio-2010 silverlight-toolkit dockpanel silverlight-4.0

14
推荐指数
1
解决办法
3342
查看次数

如何使DockPanel中的项目扩展以适应WPF中的所有可用空间?

我有一个StackPanel包含StackPanel和其他一些物品.第一个StackPanel具有垂直方向,内部具有水平方向.内部有a TreeView和a ListView,我希望它们扩展并适合窗口的宽度,我在窗口设置并允许用户更改.我也希望外部StackPanel适合窗户的高度.我该怎么做呢?

编辑: 我已经转换为使用a DockPanel,并且我已经DockPanel.Dock在每个元素中正确设置了属性,并且LastChildFill在两个dockpanel中都禁用了,布局仍然没有拉伸.

代码:

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
    <DockPanel Name="wrapperDockPanel" LastChildFill="False">
        <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" />
        <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False">
            <TreeView Name="categoryTreeView" />
            <ListView Name="clipListView" />
        </DockPanel>
        <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" />
    </DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

c# wpf stackpanel dockpanel

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

用于.NET的Dock Panel组件,允许在选项卡页面内对接?

我想构建一个用户界面,由于历史原因,它有很多"列"信息.其中许多在所有情况下都与所有用户无关,所以我想我会看到停靠面板,以允许用户根据他们的工作场景隐藏或重新排列列.

这是.NET 3.5中的Winforms.

因此,我想要以下内容:

  • 在主窗体中有标签页
  • 每个标签页都可以有停靠在其中的停靠面板
  • 坞站面板应该可以从一个标签页移动到另一个标签页

示例样机http://images.vkarlsen.no/so/2902953/dock-test.png

到目前为止,我已经尝试了以下组件包,没有运气:

Telerik的

允许我停靠在标签页内,但停靠面板无法从一个标签页移动到另一个标签页.当尝试将浮动面板拖放到与其来源不同的选项卡页面上时,它会显示停靠栏将成功,但是当它被丢弃时,它将停靠在其所有者容器上.

Divelements SandDoc

与Telerik相同的问题.

DevExpress XtraBars

与Telerik相同的问题.

http://sourceforge.net/projects/dockpanelsuite/

同样的问题,停靠站内容窗口只能属于一个停靠面板,这意味着它无法从一个选项卡迁移到另一个选项卡.


基本上,有没有人知道任何这样的组件(包)可以让我做我想要的?


编辑:好的,我试过让Sourceforge控件在上面工作,但我看不出如何使这个工作.

基本上,这就是我需要做的事情:

  1. 我需要有多个标签页(我不需要取消它们,它们可以是静态的)
  2. 我需要能够将内容停靠到标签页
  3. 我需要能够将内容从一个标签页移动到另一个标签页

如果我理解下面的答案提到这个控件,我应该使用DockPanel而不是TabControl,而DockPane而不是TabPage,但据我所知,这只能让我能够停靠和取消选项卡页面,而这不是我想要的是.

无论如何,这是一个程序文件,只需创建一个Winforms项目,从sourceforge项目添加对.dll的引用,并在Program.cs中粘贴此代码:

using System;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;

namespace DockTest
{
    public class DockWindow1 : DockContent
    {
        public DockWindow1()
        {
            TabText = "Dock-window #1";

            DockPanel panel = new DockPanel();
            panel.Dock = DockStyle.Fill;
            Controls.Add(panel);

            // tried this related to the exceptions
            // this.DockPanel = panel;
        }
    }

    public class DockWindow2 : DockContent
    {
        public DockWindow2() …
Run Code Online (Sandbox Code Playgroud)

.net components tabpage tabpanel dockpanel

11
推荐指数
1
解决办法
9573
查看次数