WPF边框和标题对齐

时间:2016-05-04 07:44:09

标签: wpf listbox alignment border itemtemplate

我的XAML代码中有两个问题。

<Grid Margin="20">

        <ListBox x:Name="lbChampToSelect" ItemsSource="{Binding Lst}" HorizontalContentAlignment="Stretch" Grid.IsSharedSizeScope="True">
        <Border Background="FloralWhite" BorderBrush="Silver" BorderThickness="1" CornerRadius="3,3,3,3">                
            <ListBox.Template>
                <ControlTemplate>
                    <DockPanel LastChildFill="True">
                    <Grid Margin="5,2" DockPanel.Dock="Top" >
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100" SharedSizeGroup="Col1"></ColumnDefinition>
                            <ColumnDefinition Width="100" SharedSizeGroup="Col1"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0">Libellé</Label>
                        <CheckBox IsChecked="False" Grid.Column="1"/>
                    </Grid>
                    <ItemsPresenter></ItemsPresenter>
                    </DockPanel>
                </ControlTemplate>                    
            </ListBox.Template>

            <ListBox.ItemTemplate>                    
                <DataTemplate>
                    <Grid Margin="5,2">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition  Width="100" SharedSizeGroup="Col1"/>
                            <ColumnDefinition Width="100" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Margin="0,0,10,0" Text="{Binding Libelle }" Grid.Column="0" />
                        <CheckBox IsChecked="False" Grid.Column="1"/>
                    </Grid>
                </DataTemplate>                    
            </ListBox.ItemTemplate>
        </Border>
    </ListBox>

</Grid>

首先:无论我尝试什么,我都无法对齐标题和包含复选框的列(标有复选框的文本值)。最后,标题复选框应该检查所有子结果。

第二:我只是试图在我的整个列表框上都有一个边框,包括标题,但我收到一个xaml错误,说成员模板无法访问或不存在。

谢谢你的答案。

2 个答案:

答案 0 :(得分:0)

我将从第二个问题开始:

你的边框应该在ControlTemplate内(鉴于我已经猜对了你想要它的样子)。

<ControlTemplate>
    <Border Background="FloralWhite" BorderBrush="Silver" BorderThickness="1" CornerRadius="3,3,3,3">

现在回答第一个问题:有很多因素会影响ListBox中项目的布局。这是我用来解决问题的方法。

  1. 从网格中删除边距,我会将它们设置为0,至少目前是这样。当您知道什么会影响什么时,您可以稍后添加布局。
  2. 下载Snoop
  3. 启动您的应用程序并开始窥探它

  4. 在层次结构中查找控件,并尝试修改边距/填充值。这样你就会看到影响布局的因素。

  5. 在代码中应用新值。

答案 1 :(得分:0)

否则,通过使用ListView,您可以拥有项目标题:

<ListView Margin="10" x:Name="lbChampToSelect" ItemsSource="{Binding Lst}" HorizontalContentAlignment="Stretch" Grid.IsSharedSizeScope="True" BorderBrush="Silver"
                 BorderThickness="1">
<ListView.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
    <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
        <Setter Property="HorizontalAlignment" Value="Center"/>
    </Style>
</ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Libelle" Width="120" DisplayMemberBinding="{Binding Libelle}" />
            <GridViewColumn Width="50">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{ Binding IsChecked}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
                <GridViewColumn.Header>
                    <CheckBox/>
                </GridViewColumn.Header>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>