使用绑定视图更改GridView ColumnHeaderContainerStyle

时间:2014-10-31 14:48:25

标签: c# wpf xaml listview gridview

我有一个绑定的ListView,如下所示:

<ListView Margin="0,10,8,-10" BorderThickness="2" BorderBrush="AliceBlue" 
                     ItemsSource="{Binding PackageBrowser.Documents}" 
                     SelectedItem="{Binding SelectedDocument}"
                     View="{Binding PackageBrowser.ColumnConfig, Converter={Converters:ConfigToDynamicGridViewConverter}}">... </ListView>

此绑定的主要目的是生成动态列。

这是我的转换器:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var config = value as ColumnConfig;
        var gridView = new GridView();
        var actualColumn = new GridViewColumn() { Header = "Name", DisplayMemberBinding = new Binding("Name") };
        gridView.Columns.Add(actualColumn);

        if (config != null)
        {
            foreach (var column in config.Columns)
            {
                var binding = new Binding(string.Format(CultureInfo.InvariantCulture, "ColumnValues[{0}]", column.Name));
                gridView.Columns.Add(new GridViewColumn { Header = column.Header, DisplayMemberBinding = binding });
            }

            foreach (GridViewColumn c in gridView.Columns)
            {
                // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector)
                // i.e. it is the same code that is executed when the gripper is double clicked
                // if (adjustAllColumns || App.StaticGabeLib.FieldDefsGrid[colNum].DispGrid)
                if (double.IsNaN(c.Width))
                {
                    c.Width = c.ActualWidth;
                }

                c.Width = double.NaN;
            }  
        }

        return gridView;
    }

我的问题是: 如何修改gridView的ColumnHeaderContainerStyle,以便无法调整所有列的大小。

类似的东西,但在后面的代码中:

<GridView.ColumnHeaderContainerStyle>
  <Style TargetType="{x:Type GridViewColumnHeader}">
       <Setter Property="IsEnabled" Value="False"/>
  </Style>
</GridView.ColumnHeaderContainerStyle>

1 个答案:

答案 0 :(得分:1)

我猜,你可能会写错过的代码(ColumnHeaderContainerStyle)。如果您为ColumnHeaderStyle编写任何样式。您必须完成所有功能(如果您要进行不同的设计)。例如:Thumb,ContentPresenter等我已经为您编写了listview样式代码。 (对不起,我不太清楚英语。我希望这就是你想要的)

这是代码:

<Style x:Key="GridViewColumnHeaderGripper" TargetType="Thumb">
    <Setter Property="Width" Value="18"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border Padding="{TemplateBinding Padding}" Background="Transparent">
                    <Rectangle HorizontalAlignment="Center" Width="1" Fill="#FFD4D4D4"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="{x:Type GridViewColumnHeader}" TargetType="GridViewColumnHeader">
    <Setter Property="FontFamily" Value="Tahoma"/>       
    <Setter Property="Foreground" Value="#FF003362"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="5"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridViewColumnHeader">
                <Grid>
                    <Border Background="White" BorderBrush="#FFD4D4D4" BorderThickness="1,1,0,1" Name="HeaderBorder" Padding="{TemplateBinding Padding}">
                        <ContentPresenter Name="HeaderContent" Content="{TemplateBinding Content}" Margin="0,0,0,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    </Border>
                    <Thumb x:Name="PART_HeaderGripper" HorizontalAlignment="Right" Margin="0,0,-9,0" Style="{StaticResource GridViewColumnHeaderGripper}"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter TargetName="HeaderContent" Property="Margin" Value="1,1,0,0"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" Value=".5" TargetName="HeaderBorder"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="Role" Value="Floating">
            <Setter Property="Opacity" Value="0.7" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="GridViewColumnHeader">
                        <Canvas Name="PART_FloatingHeaderCanvas">
                            <Rectangle Fill="#60000000" Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}"/>
                        </Canvas>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>
相关问题