我的第一个问题,所以请保持温柔。 我已经试了好几天才搞清楚。我得到的最接近的是以编程方式访问后面代码中的单元格内容。有没有办法在xaml中做到这一点?
例如,这不起作用
<Style x:Key="ComboBox" TargetType="DataGridCell">
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<DataTemplate x:Key="foo">
<Border Margin="3">
<DataGrid Style="{StaticResource DGStyle}" Block.TextAlignment="Center">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="bar" SelectedItemBinding="{Binding ListofIntegers, Mode=TwoWay}"
ItemsSource="{Binding Source={StaticResource fooItem}, Path=ListofBar, Mode=OneWay}" CellStyle="{StaticResource ComboBox}" TextBlock.TextAlignment="Center"/>
</DataGrid.Columns>
</DataGrid>
</Border>
</DataTemplate>
我已经尝试了一些其他的东西,能够将标题和文本框放在文本框列中。尽管如此,组合框并不想与我合作。谁知道怎么样?
编辑:好的,现在觉得很蠢,正在玩安迪的解决方案,偶然发现了这个
<Style x:Key="BasicComboBox" TargetType="ComboBox">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<!--can mess with appearance of drop down menu here-->
</Style>
</Setter.Value>
</Setter>
</Style>
<DataGridComboBoxColumn Header="Size" HeaderStyle="{StaticResource Header}" SelectedItemBinding="{Binding Size.Name, Mode=TwoWay}"
ItemsSource="{Binding Source={StaticResource InsertSizes}}" EditingElementStyle="{StaticResource BasicComboBox}"/>
可以在EditingElementStyle中设置生成的组合框的样式。
编辑2:虽然上述工作正常,但我认为我会考虑使用Andy建议使用模板列,组合框也不会与网格混合,但是用户更容易选择,因为不需要打开编辑模式。
答案 0 :(得分:2)
您可以使用模板列,我在这里使用了一些垃圾数据,但绑定在ComboBox上的工作方式与DataGridComboBoxColumn完全相同。
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<DataGrid>
<DataGrid.Items>
<sys:String>a</sys:String>
</DataGrid.Items>
<DataGrid.Columns>
<DataGridTemplateColumn Width="300">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox HorizontalContentAlignment="Center">
<ComboBox.Items>
<sys:String>string1</sys:String>
<sys:String>string2</sys:String>
<sys:String>string3</sys:String>
</ComboBox.Items>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Window>