RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1266265
Accepted
iluxa1810
iluxa1810
Asked:2022-04-05 16:39:45 +0000 UTC2022-04-05 16:39:45 +0000 UTC 2022-04-05 16:39:45 +0000 UTC

如何对齐位于 2 个不同容器中的组合框?

  • 772

如何对齐红线(即顶部的组合框): 在此处输入图像描述

问题是顶部是嵌套在主网格中的单独网格(3 列),底部是嵌套在主网格中的 GroupBox。

从理论上讲,我可以将所有这些合并到 1 个网格中,但是由于 GroupBox 仍然会有轻微的差异......

标记:

<Window x:Class="DictionaryCreator.UI.Windows.DictionaryConfigurationWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DictionaryCreator.UI.Windows"
        xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
        mc:Ignorable="d"
        Title="Конфигурация справочника" Height="680" Width="800">
    <Grid >
        <Grid.Resources >
            <Style TargetType="Border" >
                <Setter Property="Padding" Value="5,5,5,5" />
            </Style>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition ></ColumnDefinition>
            <ColumnDefinition ></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0" ColumnSpan="2" DataContext="{Binding DictConfigVM}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition ></ColumnDefinition>
                <ColumnDefinition ></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Border Grid.Row="0" Grid.Column="0">
                <Label  HorizontalContentAlignment="Right">Тип базы данных</Label>
            </Border>
            <Border Grid.Row="0" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=DbKinds}" DisplayMemberPath="Name" SelectedValue="{Binding Path=SelectedDbKind}"/>
            </Border>

            <Border Grid.Row="1" Grid.Column="0" >
                <Label HorizontalContentAlignment="Right">Сервер (MSSQL) или путь к файлу (MS ACCESS)</Label>
            </Border>
            <Border Grid.Row="1" Grid.Column="1">
                <TextBox  Text="{Binding Path=FilePathOrServerName,UpdateSourceTrigger=PropertyChanged}"/>
            </Border>

            <Border Grid.Row="2" Grid.Column="0">
                <Label   HorizontalContentAlignment="Right">Название базы данных</Label>
            </Border>
            <Border Grid.Row="2" Grid.Column="1">
                <TextBox  IsEnabled="{Binding Path=DbNameEnable}" Text="{Binding Path=DbName,UpdateSourceTrigger=PropertyChanged}"></TextBox>
            </Border>

            <Border Grid.Row="3">
                <Label  HorizontalContentAlignment="Right">Название таблицы</Label>
            </Border>
            <Border Grid.Row="3" Grid.Column="1">
                <ComboBox  DockPanel.Dock="Left" MinWidth="350" ItemsSource="{Binding Path=TableDescriptions}" SelectedValue="{Binding Path=SelectedTableDescription}">
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock>
                                <Run Text="{Binding Schema}" />
                                <Run Text="." />
                                <Run Text="{Binding TableName}" />
                            </TextBlock>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </Border>

            <Border Grid.Row="3" Grid.Column="2">
                <Button  DockPanel.Dock="Right" Command="{Binding Path=RefreshTablesCommand}"  >
                    <Image Style="{StaticResource ImageIcon}"  Source="../Icons/Refresh.png"/>
                    <Button.ToolTip>
                        Обновить
                    </Button.ToolTip>
                </Button>
            </Border>

            <Border Grid.Row="4">
                <Label  HorizontalContentAlignment="Right">Ключ таблицы (целое число)</Label>
            </Border>
            <Border Grid.Row="4" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=ColumnDescriptions}" DisplayMemberPath="ColumnName" SelectedValue="{Binding Path=SelectedKeyColumnDescription}"></ComboBox>
            </Border>
            <Border Grid.Row="5">
                <Label  HorizontalContentAlignment="Right">Название поля для нормализованного значения</Label>
            </Border>
            <Border Grid.Row="5" Grid.Column="1">
                <ComboBox  ItemsSource="{Binding Path=ColumnDescriptions}" DisplayMemberPath="ColumnName" SelectedValue="{Binding Path=SelectedFullTextColumnDescription}"></ComboBox>
            </Border>

        </Grid>
        <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" >
            <GroupBox DataContext="{Binding AlgorithmConfigVM}">
                <GroupBox.Header>
                    Настройка алгоритма
                </GroupBox.Header>
                <Border>
                    <StackPanel>
                        <ComboBox ItemsSource="{Binding NormalizeServices}" SelectedItem="{Binding SelectedNormalizeService}" DisplayMemberPath="NormalizeAlgorithmType.Name"/>
                        <Border>
                            <StackPanel >
                                <Label>Параметры алгоритма</Label>
                                <ListView MinHeight="100" ItemsSource="{Binding Params}">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition/>
                                                    <ColumnDefinition/>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="*"></RowDefinition>
                                                </Grid.RowDefinitions>
                                                <Label Grid.Column="0" Content="{Binding Item.Name}"></Label>
                                                <TextBox Grid.Column="1" Text="{Binding Value}"></TextBox>
                                            </Grid>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackPanel>
                        </Border>
                        <Border>
                            <StackPanel>
                                <Label>Настройка привязок результатов раскладки</Label>
                                <ListView Height="100" ItemsSource="{Binding FieldBindings}" SelectedItem="{Binding SelectedBinding}" ScrollViewer.VerticalScrollBarVisibility="Visible"  HorizontalContentAlignment="Stretch">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <Grid>
                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition></ColumnDefinition>
                                                    <ColumnDefinition></ColumnDefinition>
                                                </Grid.ColumnDefinitions>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="*"></RowDefinition>
                                                </Grid.RowDefinitions>
                                                <Label Grid.Column="0" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
                                                    <TextBox IsReadOnly="True" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" BorderThickness="0" Focusable="False" Cursor="Arrow" >
                                                        <TextBox.Text>
                                                            <MultiBinding StringFormat="{}{0} ({1})" Mode="OneWay">
                                                                <Binding Path="Item.Name" />
                                                                <Binding Path="Item.Description" />
                                                            </MultiBinding>
                                                        </TextBox.Text>
                                                    </TextBox>
                                                </Label>
                                                <ComboBox  Grid.Column="1" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=StackPanel},
                                        Path=DataContext.AvailableColumns}" DisplayMemberPath="ColumnName"
                                              SelectedItem="{Binding Value}">
                                                </ComboBox>
                                            </Grid>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackPanel>
                        </Border>

                    </StackPanel>
                </Border>
            </GroupBox>
        </Border>


        <WrapPanel Grid.Row="2"  Grid.ColumnSpan="3" HorizontalAlignment="Center" Margin="0 30 0 0">
            <Button Command="{Binding Path=SaveCommand}" Margin="0 0 25 0">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">
                        <Image Style="{StaticResource ImageIconWithMargin}"  Source="../Icons/Save.png"/>
                        <Label VerticalAlignment="Center">Сохранить</Label>
                    </StackPanel>
                </Button.Content>
            </Button>
            <Button Command="{Binding Path=CancelCommand}" Margin="0 0 25 0">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">
                        <Image Style="{StaticResource ImageIconWithMargin}"  Source="../Icons/Cancel.png"/>
                        <Label VerticalAlignment="Center">Отменить</Label>
                    </StackPanel>
                </Button.Content>
            </Button>
        </WrapPanel>
    </Grid>

</Window>
c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    VladD
    2022-04-07T06:27:36Z2022-04-07T06:27:36Z

    让我们用来SharedSizeGroup向下“移动”按钮的未知宽度。为此,请将外部Grid声明为SharedSizeScope. 你会得到这样的东西:

    <Window ...>
        <Grid Grid.IsSharedSizeScope="True">
            <Grid.Resources >
                <Style TargetType="Border">
                    <Setter Property="Padding" Value="5,5,5,5"/>
                </Style>
            </Grid.Resources>
            <!-- ColumnDefinitions тут не нужно -->
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0" DataContext="{Binding DictConfigVM}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                    <ColumnDefinition Width="Auto" SharedSizeGroup="ButtonWidth"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <!-- и так далее -->
                </Grid.RowDefinitions>
                <Border Grid.Row="0" Grid.Column="0">
                    <Label HorizontalContentAlignment="Right">Тип базы данных</Label>
                </Border>
                <Border Grid.Row="0" Grid.Column="1">
                    <ComboBox ItemsSource="{Binding Path=DbKinds}" .../>
                </Border>
    
                <Border Grid.Row="1" Grid.Column="0" >
                    <Label HorizontalContentAlignment="Right">Сервер (MSSQL) или...</Label>
                </Border>
                <Border Grid.Row="1" Grid.Column="1">
                    <TextBox Text="{Binding Path=FilePathOrServerName,
                                            UpdateSourceTrigger=PropertyChanged}"/>
                </Border>
    
                <!-- тут кнопка в отдельной колонке -->
                <Border Grid.Row="1" Grid.Column="2">
                    <Button DockPanel.Dock="Right" Command="{Binding Path=RefreshTablesCommand}"
                            Tooltip="Обновить">
                        <Image Style="{StaticResource ImageIcon}" Source="../Icons/Refresh.png"/>
                    </Button>
                </Border>
    
                <Border Grid.Row="3">
                    <Label  HorizontalContentAlignment="Right">Ключ таблицы (целое число)</Label>
                </Border>
                <Border Grid.Row="3" Grid.Column="1">
                    <ComboBox ItemsSource="{Binding Path=ColumnDescriptions}" .../>
                </Border>
                <!-- и так далее -->
            </Grid>
            <Grid Grid.Row="1" Grid.Column="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <!-- положим пустую колонку такого же размера как и сверху -->
                    <ColumnDefinition Width="Auto" SharedSizeGroup="ButtonWidth"/>
                </Grid.ColumnDefinitions>
                <!-- ВАЖНО! для компенсации лишних двух Border-ов отступим назад на 10 px -->
                <Border Margin="0,0,-10,0">
                    <GroupBox DataContext="{Binding AlgorithmConfigVM}" Header="Настройка алгоритма">
                        <Border>
                            <StackPanel>
                                <ComboBox ItemsSource="{Binding NormalizeServices}" .../>
                                <Border>
                                    <StackPanel >
                                        <Label>Параметры алгоритма</Label>
                                        <ListView MinHeight="100" ItemsSource="{Binding Params}">
                                            <ListView.ItemTemplate>
                                               ...
                                            </ListView.ItemTemplate>
                                        </ListView>
                                    </StackPanel>
                                </Border>
                                ...
                            </StackPanel>
                        </Border>
                    </GroupBox>
                </Border>
            </Grid>
    
            <WrapPanel Grid.Row="2" HorizontalAlignment="Center" Margin="0 30 0 0">
                ...
            </WrapPanel>
        </Grid>
    </Window>
    
    • 3

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5