通过样式中的xaml在datagridcomboboxcolumn中的组合框中居中内容

时间:2014-10-24 13:01:26

标签: wpf xaml datagrid alignment datagridcomboboxcolumn

我的第一个问题,所以请保持温柔。 我已经试了好几天才搞清楚。我得到的最接近的是以编程方式访问后面代码中的单元格内容。有没有办法在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建议使用模板列,组合框也不会与网格混合,但是用户更容易选择,因为不需要打开编辑模式。

1 个答案:

答案 0 :(得分:2)

您可以使用模板列,我在这里使用了一些垃圾数据,但绑定在ComboBox上的工作方式与DataGridComboBoxColumn完全相同。

enter image description here

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