C# 自定义数据模板-控件不';t占据整个网格列宽度
我对列表框中自定义数据模板的布局有点困惑。 问题是,每个ListBoxItem都没有占用整行宽度 以下是列表框的数据模板: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"
<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”而被起诉-/