【问题标题】:WPF GridView/ListView changing column width with fingers on touch deviceWPF GridView/ListView 在触摸设备上用手指改变列宽
【发布时间】:2020-10-26 00:06:38
【问题描述】:

当您在 WPF 中有 ListView/GridView 时,您可以通过单击并拖动两列之间的分隔符来更改列的宽度。 使用鼠标查找是可行的,但是我可以做些什么来使热点区域变宽,以便用户有机会用手指在列标题之间拖动分隔符?

【问题讨论】:

    标签: wpf listview gridview touch


    【解决方案1】:

    创建自定义GridViewColumnHeader 样式。最简单的方法是将<GridViewColumnHeader/> 元素添加到 Blend 中的空 XAML 文件,右键单击它并选择编辑模板->编辑副本。这会将默认模板复制到您的 XAML 标记中,然后您可以根据自己的要求进行编辑。

    这是一个示例,您可以从这里开始:

    <ListView>
        <ListView.Resources>
            <LinearGradientBrush x:Key="GridViewColumnHeaderBackground" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFFFFFFF" Offset="0"/>
                <GradientStop Color="#FFFFFFFF" Offset="0.4091"/>
                <GradientStop Color="#FFF7F8F9" Offset="1"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="GridViewColumnHeaderBorderBackground" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFF2F2F2" Offset="0"/>
                <GradientStop Color="#FFD5D5D5" Offset="1"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="GridViewColumnHeaderHoverBackground" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FFBDEDFF" Offset="0"/>
                <GradientStop Color="#FFB7E7FB" Offset="1"/>
            </LinearGradientBrush>
            <LinearGradientBrush x:Key="GridViewColumnHeaderPressBackground" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="#FF8DD6F7" Offset="0"/>
                <GradientStop Color="#FF8AD1F5" Offset="1"/>
            </LinearGradientBrush>
            <Style x:Key="GridViewColumnHeaderGripper" TargetType="{x:Type Thumb}">
                <Setter Property="Canvas.Right" Value="-9"/>
                <Setter Property="Width" Value="18"/>
                <Setter Property="Height" Value="{Binding ActualHeight, RelativeSource={RelativeSource TemplatedParent}}"/>
                <Setter Property="Padding" Value="0"/>
                <Setter Property="Background" Value="{StaticResource GridViewColumnHeaderBorderBackground}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Thumb}">
                            <Border Background="Transparent" Padding="{TemplateBinding Padding}">
                                <Rectangle Fill="{TemplateBinding Background}" HorizontalAlignment="Center" Width="1"/>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <Style TargetType="{x:Type GridViewColumnHeader}">
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
                <Setter Property="VerticalContentAlignment" Value="Center"/>
                <Setter Property="Background" Value="{StaticResource GridViewColumnHeaderBackground}"/>
                <Setter Property="BorderBrush" Value="{StaticResource GridViewColumnHeaderBorderBackground}"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Padding" Value="2,0,2,0"/>
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                            <Grid SnapsToDevicePixels="true">
                                <Border x:Name="HeaderBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,1,0,1" Background="{TemplateBinding Background}">
                                    <Grid>
                                        <Grid.RowDefinitions>
                                            <RowDefinition MaxHeight="7"/>
                                            <RowDefinition/>
                                        </Grid.RowDefinitions>
                                        <Rectangle x:Name="UpperHighlight" Fill="#FFE3F7FF" Visibility="Collapsed"/>
                                        <Border Padding="{TemplateBinding Padding}" Grid.RowSpan="2">
                                            <ContentPresenter x:Name="HeaderContent" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0,0,0,1" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                        </Border>
                                    </Grid>
                                </Border>
                                <Border x:Name="HeaderHoverBorder" BorderThickness="1,0,1,1" Margin="1,1,0,0"/>
                                <Border x:Name="HeaderPressBorder" BorderThickness="1,1,1,0" Margin="1,0,0,1"/>
                                <Canvas>
                                    <Thumb x:Name="PART_HeaderGripper" Style="{StaticResource GridViewColumnHeaderGripper}"/>
                                </Canvas>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="true">
                                    <Setter Property="Background" TargetName="HeaderBorder" Value="{StaticResource GridViewColumnHeaderHoverBackground}"/>
                                    <Setter Property="BorderBrush" TargetName="HeaderHoverBorder" Value="#FF88CBEB"/>
                                    <Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
                                    <Setter Property="Background" TargetName="PART_HeaderGripper" Value="Transparent"/>
                                </Trigger>
                                <Trigger Property="IsPressed" Value="true">
                                    <Setter Property="Background" TargetName="HeaderBorder" Value="{StaticResource GridViewColumnHeaderPressBackground}"/>
                                    <Setter Property="BorderBrush" TargetName="HeaderHoverBorder" Value="#FF95DAF9"/>
                                    <Setter Property="BorderBrush" TargetName="HeaderPressBorder" Value="#FF7A9EB1"/>
                                    <Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
                                    <Setter Property="Fill" TargetName="UpperHighlight" Value="#FFBCE4F9"/>
                                    <Setter Property="Visibility" TargetName="PART_HeaderGripper" Value="Hidden"/>
                                    <Setter Property="Margin" TargetName="HeaderContent" Value="1,1,0,0"/>
                                </Trigger>
                                <Trigger Property="Height" Value="Auto">
                                    <Setter Property="MinHeight" Value="20"/>
                                </Trigger>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="Role" Value="Floating">
                        <Setter Property="Opacity" Value="0.4082"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                                    <Canvas x:Name="PART_FloatingHeaderCanvas">
                                        <Rectangle Fill="#FF000000" Height="{TemplateBinding ActualHeight}" Opacity="0.4697" Width="{TemplateBinding ActualWidth}"/>
                                    </Canvas>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="Role" Value="Padding">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                                    <Border x:Name="HeaderBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,1,0,1" Background="{TemplateBinding Background}"/>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="Height" Value="Auto">
                                            <Setter Property="MinHeight" Value="20"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多