【问题标题】:Telerik - WPF - RadGridView Filter - How to set checkbox container to scroll?Telerik - WPF - RadGridView 过滤器 - 如何设置复选框容器滚动?
【发布时间】:2011-11-15 18:56:20
【问题描述】:

我对 WPF 还是很陌生,我正在尝试弄清楚如何使用 Telerik RadGrid for WPF。

网格有一个过滤器,该过滤器会自动为字段中的每个值填充复选框。您可以在下面看到由此产生的问题:

有没有办法让包含复选框的组件在某个点之后滚动?比如说,最大 200 像素左右?

我正在尝试在资源文件中维护这样的更改。我对 XAML 没问题,但不是 C# 程序员。这是我目前拥有的 GridViewHeaderCell 部分:

<Style x:Key="{x:Type telerik:GridViewHeaderCell}" TargetType="{x:Type telerik:GridViewHeaderCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type telerik:GridViewHeaderCell}">
                <Grid x:Name="PART_HeaderCellGrid">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Border x:Name="GridViewHeaderCell" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Grid.ColumnSpan="2">
                        <Border BorderBrush="#FF4B4B4B" BorderThickness="1">
                            <Border.Background>
                                <LinearGradientBrush EndPoint="1,1" StartPoint="1,0">
                                    <GradientStop Color="#FF292929" Offset="1"/>
                                    <GradientStop Color="#FF6C6C6C"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                    </Border>
                    <Border x:Name="GridViewHeaderCell_Over" BorderBrush="#FFFFC92B" BorderThickness="{TemplateBinding BorderThickness}" Grid.ColumnSpan="2" Opacity="0">
                        <Border BorderBrush="White" BorderThickness="1">
                            <Border.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFFFFBA3" Offset="1"/>
                                    <GradientStop Color="#FFFFFBDA" Offset="0"/>
                                    <GradientStop Color="#FFFFD25A" Offset="0.43"/>
                                    <GradientStop Color="#FFFEEBAE" Offset="0.42"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                    </Border>
                    <Border x:Name="GridViewHeaderCell_Selected" BorderThickness="{TemplateBinding BorderThickness}" Grid.ColumnSpan="2" Opacity="0">
                        <Border.BorderBrush>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF616161" Offset="0"/>
                                <GradientStop Color="#FF989898" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.BorderBrush>
                        <Border BorderThickness="1">
                            <Border.BorderBrush>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFB69A78"/>
                                    <GradientStop Color="#FFFFE17A" Offset="0.126"/>
                                </LinearGradientBrush>
                            </Border.BorderBrush>
                            <Border.Background>
                                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                    <GradientStop Color="#FFFFD74E" Offset="0.996"/>
                                    <GradientStop Color="#FFFFDCAB" Offset="0.17"/>
                                    <GradientStop Color="#FFFFB062" Offset="0.57"/>
                                    <GradientStop Color="#FFFFD18F" Offset="0.56"/>
                                    <GradientStop Color="#FFFFBA74"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                    </Border>
                    <ContentControl x:Name="ContentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsTabStop="{TemplateBinding IsTabStop}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                        <ContentControl.Style>
                            <Style TargetType="{x:Type ContentControl}">
                                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
                            </Style>
                        </ContentControl.Style>
                    </ContentControl>
                    <Path x:Name="PART_SortIndicator" Grid.ColumnSpan="2" Data="M0,0L1,0 2,0 3,0 4,0 5,0 5,1 4,1 4,2 3,2 3,3 2,3 2,2 1,2 1,1 0,1 0,0z" Fill="Black" HorizontalAlignment="Center" Height="3" Margin="0,3,0,0" Opacity="0" RenderTransformOrigin="0.5,0.5" Stretch="Fill" VerticalAlignment="Top" Width="5">
                        <Path.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform ScaleY="-1" ScaleX="1"/>
                                <SkewTransform AngleY="0" AngleX="0"/>
                                <RotateTransform Angle="0"/>
                                <TranslateTransform X="0" Y="0"/>
                            </TransformGroup>
                        </Path.RenderTransform>
                    </Path>
                    <telerik:FilteringDropDown x:Name="PART_DistinctFilterControl" Grid.Column="1" IsTabStop="False" Margin="0,0,8,0" Visibility="{TemplateBinding FilteringUIVisibility}">
                        <telerik:StyleManager.Theme>
                            <telerik:Office_BlackTheme/>
                        </telerik:StyleManager.Theme>
                    </telerik:FilteringDropDown>
                    <Thumb x:Name="PART_LeftHeaderGripper" Grid.ColumnSpan="2" HorizontalAlignment="Left" IsTabStop="{TemplateBinding IsTabStop}">
                        <Thumb.Style>
                            <Style TargetType="{x:Type Thumb}">
                                <Setter Property="Width" Value="8"/>
                                <Setter Property="Background" Value="Transparent"/>
                                <Setter Property="BorderBrush" Value="Transparent"/>
                                <Setter Property="BorderThickness" Value="0"/>
                                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
                                <Setter Property="Padding" Value="0"/>
                                <Setter Property="Cursor" Value="SizeWE"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type Thumb}">
                                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Thumb.Style>
                    </Thumb>
                    <Thumb x:Name="PART_RightHeaderGripper" Grid.ColumnSpan="2" HorizontalAlignment="Right" IsTabStop="{TemplateBinding IsTabStop}">
                        <Thumb.Style>
                            <Style TargetType="{x:Type Thumb}">
                                <Setter Property="Width" Value="8"/>
                                <Setter Property="Background" Value="Transparent"/>
                                <Setter Property="BorderBrush" Value="Transparent"/>
                                <Setter Property="BorderThickness" Value="0"/>
                                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                <Setter Property="VerticalContentAlignment" Value="Stretch"/>
                                <Setter Property="Padding" Value="0"/>
                                <Setter Property="Cursor" Value="SizeWE"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type Thumb}">
                                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Thumb.Style>
                    </Thumb>
                </Grid>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"/>
                            <Condition Property="SortingState" Value="None"/>
                        </MultiTrigger.Conditions>
                        <MultiTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="GridViewHeaderCell_Over">
                                        <SplineDoubleKeyFrame KeyTime="0:0:0.2" Value="1"/>
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiTrigger.EnterActions>
                        <MultiTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="GridViewHeaderCell_Over">
                                        <SplineDoubleKeyFrame KeyTime="0:0:0.2" Value="0"/>
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiTrigger.ExitActions>
                        <Setter Property="Foreground" Value="Black"/>
                    </MultiTrigger>
                    <Trigger Property="SortingState" Value="Ascending">
                        <Setter Property="Foreground" Value="Black"/>
                        <Setter Property="Opacity" TargetName="PART_SortIndicator" Value="1"/>
                        <Setter Property="LayoutTransform" TargetName="PART_SortIndicator">
                            <Setter.Value>
                                <ScaleTransform ScaleY="1" ScaleX="1"/>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="Opacity" TargetName="GridViewHeaderCell_Selected" Value="1"/>
                    </Trigger>
                    <Trigger Property="SortingState" Value="Descending">
                        <Setter Property="Foreground" Value="Black"/>
                        <Setter Property="Opacity" TargetName="PART_SortIndicator" Value="1"/>
                        <Setter Property="LayoutTransform" TargetName="PART_SortIndicator">
                            <Setter.Value>
                                <ScaleTransform ScaleY="-1" ScaleX="1"/>
                            </Setter.Value>
                        </Setter>
                        <Setter Property="Opacity" TargetName="GridViewHeaderCell_Selected" Value="1"/>
                    </Trigger>
                    <Trigger Property="SortingState" Value="None">
                        <Setter Property="Opacity" TargetName="PART_SortIndicator" Value="0"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF5B5B5B" Offset="1"/>
                <GradientStop Color="#FF868686"/>
                <GradientStop Color="#FF4F4F4F" Offset="0.42"/>
                <GradientStop Color="#FF0E0E0E" Offset="0.43"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderBrush" Value="#FF848484"/>
    <Setter Property="BorderThickness" Value="0,0,1,1"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="Padding" Value="5,0,3,0"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="DropMarkPen">
        <Setter.Value>
            <Pen Brush="White" Thickness="2"/>
        </Setter.Value>
    </Setter>
    <Setter Property="SnapsToDevicePixels" Value="True"/>
</Style>

如果您需要有关解决方案的更多信息,请告诉我!

谢谢。

【问题讨论】:

    标签: c# .net wpf xaml telerik


    【解决方案1】:

    只是好奇您使用的是什么版本,以及应用程序中是否有任何其他样式,因为默认情况下,下拉列表的最大高度为 250 像素并且应该处理滚动。这是 2011.2.712.40 版本的全新项目的默认视图:

    如果您能提供更多关于版本号的信息,那将是一个很好的下一步,因为以上来自最新的官方版本(不是明天的新版本:D)。因为过滤器控件将由这段代码处理:

                    <telerik:FilteringDropDown x:Name="PART_DistinctFilterControl" Grid.Column="1" IsTabStop="False" Margin="0,0,8,0" Visibility="{TemplateBinding FilteringUIVisibility}"> 
                        <telerik:StyleManager.Theme> 
                            <telerik:Office_BlackTheme/> 
                        </telerik:StyleManager.Theme> 
                    </telerik:FilteringDropDown> 
    

    但如果没有在其他地方修改/定义,那么我们需要深入挖掘导致问题的原因。

    【讨论】:

    • 嗨,埃文,感谢您的快速回复。该项目本身使用 .NET 3.5,Telerik 控件版本是“RadControls for WPF Q1 2011”。应用程序中有很多资源文件,但我找不到任何直接引用 Telerik:FilteringDropDown 的东西。是否有我应该寻找其样式可能会影响该过滤器的特定控件?
    • 嘿 Phillip,刚刚使用 Q1 (2011.1.315.35) 进行了测试,并且开箱即用的样式仍然与上图一致,因此肯定没有正确应用。尝试在您的代码中搜索 PART_DistinctValuesList,这是 FilteringControl 中包含不同项目的项目的名称。它通常将内容面板的最大高度设置为 242,所以也许有一种隐式样式覆盖了某些设置?如果您可以在 PART_DistinctValuesList 或 ListBox 或 VirtualizingStackPanel 上找到一些修改,这可能是罪魁祸首。
    • 好的,所以我在 Telerik 的网站上找到了这个控件的默认模板:telerik.com/community/forums/wpf/gridview/…。我确保 x:Type 和 x:Key 都设置为 {x:Type telerik:FilteringDropDown}。但它似乎仍然没有影响。这通常不会使其默认恢复为原始样式吗?
    • 抱歉,睡着了。 :D 如果你删除 x:Key 它应该覆盖它存在的任何地方的样式,它没有专门命名的样式键。希望能修复它,正如我在上面提到的那样,2011 年第一季度在我这边看起来肯定是不同的,所以你甚至不应该看到过滤控件看起来像那样。最坏的情况是,如果您可以压缩并发送任何东西,以便我可以查看我可以在 hutnick (at) telerik.com 上联系到我。
    • 我想我可能找到了风格的罪魁祸首。非常感谢您的帮助!
    猜你喜欢
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多