问题是顶部是嵌套在主网格中的单独网格(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>
让我们用来
SharedSizeGroup
向下“移动”按钮的未知宽度。为此,请将外部Grid
声明为SharedSizeScope
. 你会得到这样的东西: