C# 自定义数据模板-控件不';t占据整个网格列宽度

C# 自定义数据模板-控件不';t占据整个网格列宽度,c#,wpf,datatemplate,C#,Wpf,Datatemplate,我对列表框中自定义数据模板的布局有点困惑。 问题是,每个ListBoxItem都没有占用整行宽度 以下是列表框的数据模板: <Window x:Class="NewPropertyGrid.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

我对列表框中自定义数据模板的布局有点困惑。 问题是,每个ListBoxItem都没有占用整行宽度

以下是列表框的数据模板:

<Window x:Class="NewPropertyGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:NewPropertyGrid"
        Title="MainWindow" Height="200" Width="300">
    <Window.Resources>
        <DataTemplate x:Key="PropertyListTemplate">
            <Grid Background="Yellow">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <TextBlock Text="{Binding Path=PropType,Converter={local:PropTypeToString}}"
                                   Margin="1"
                                   VerticalAlignment="Center"
                                   Background="LightGray"
                                   Foreground="Black"
                                   />

                <TextBlock Grid.Column="1"
                                   Text="="
                                   Margin="1"
                                   Background="LightGray"
                                   Foreground="Black"
                                   />

                <ContentControl Grid.Column = "2"
                                Content = "{Binding Editor}"
                                HorizontalAlignment = "Stretch"
                                VerticalAlignment = "{Binding VerticalContentAlignment}"
                                />
            </Grid>
        </DataTemplate>
    </Window.Resources>

    <ListBox x:Name="lv" ItemTemplate="{StaticResource PropertyListTemplate}" Background="Green" />
</Window>

现在,当我在列表框中加载数据时

namespace NewPropertyGrid {
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();

            Loaded += (s, e) => {
                var list = new List<PropItem>();
                list.Add(new PropItem() {
                PropType = global::NewPropertyGrid.PropType.Name,
                Value = "Tester"
                });
                list.Add(new PropItem() {
                PropType = global::NewPropertyGrid.PropType.Surname,
                Value = new string[] { "X", "Y", "Z" }
                });

                lv.ItemsSource = list;
            };
        }
    }
}
名称空间NewPropertyGrid{
公共部分类主窗口:窗口{
公共主窗口(){
初始化组件();
加载+=(s,e)=>{
var list=新列表();
list.Add(新的ProItem(){
PropType=global::NewPropertyGrid.PropType.Name,
Value=“测试仪”
});
list.Add(新的ProItem(){
PropType=global::NewPropertyGrid.PropType.Nastname,
值=新字符串[]{“X”、“Y”、“Z”}
});
lv.ItemsSource=列表;
};
}
}
}
我看到frameworkelement
编辑器
没有使用网格第三列指定的全行宽度

这是该行的外观(的屏幕截图)。请注意,带有文本“Tester”的文本框未使用第3列的全宽。告诉我ListBoxItem默认模板中的
ContentPresenter
未使用全宽,即使Bd边框使用(请注意Bd的实际宽度)!

如何更改DataTemplate,以便
编辑器
使用完整的列宽


多谢

为您的
ListBoxItem
设置
HorizontalContentAlignment
Stretch
。可以在
ItemContainerStyle
中完成

<ListBox x:Name="lv" ItemTemplate="{StaticResource PropertyListTemplate}"
         Background="Green">
   <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ListBox.ItemContainerStyle>
</ListBox>

为您的
ListBoxItem
设置
HorizontalContentAlignment
Stretch
。可以在
ItemContainerStyle
中完成

<ListBox x:Name="lv" ItemTemplate="{StaticResource PropertyListTemplate}"
         Background="Green">
   <ListBox.ItemContainerStyle>
      <Style TargetType="ListBoxItem">
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
      </Style>
   </ListBox.ItemContainerStyle>
</ListBox>


废话!我浪费了4个小时试图弄明白为什么它不起作用。WPF guys因未将“HorizontalContentAlignment”的默认值设置为“Stretch”而被起诉-/废话!我浪费了4个小时试图弄明白为什么它不起作用。WPF guys因未将“HorizontalContentAlignment”的默认值设置为“Stretch”而被起诉-/