wpf xaml datagrid alignment datagridcomboboxcolumn

wpf - Centrar el contenido en el cuadro combinado dentro de datagridcomboboxcolumn mediante xaml dentro del estilo



alignment (1)

mi primera pregunta, así que por favor sé gentil. Lo he intentado durante varios días para resolverlo. Lo más cerca que me quedaba era acceder mediante programación al contenido de la celda en el código subyacente. ¿Hay alguna manera de hacerlo en el xaml?

Por ejemplo, esto no funciona

<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>

He intentado algunas otras cosas, ya que he podido centrar los encabezados y las cajas de texto en las columnas del cuadro de texto. Sin embargo, los comboboxes no quieren cooperar conmigo. ¿Alguien sabe cómo?

Edit: Ok, ahora se siente estúpido, estaba jugando con la solución de Andy y tropezó con esto

<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}"/>

Puede establecer el estilo del cuadro combinado generado en EditingElementStyle.

Editar 2: Mientras que lo anterior funciona, creo que voy a seguir con la sugerencia de Andy de usar una columna de plantilla, los cuadros combinados tampoco se mezclan con la cuadrícula, pero son mucho más fáciles de seleccionar para el usuario, ya que no es necesario abrir el modo de edición.


Podría usar una columna de plantilla en su lugar, he utilizado algunos datos basura aquí, pero los enlaces funcionan en el ComboBox exactamente de la misma manera que lo harían desde su 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>