This is a migrated thread and some comments may be shown as answers.

Custom Filter Control UI

3 Answers 67 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Patrick
Top achievements
Rank 2
Iron
Iron
Iron
Patrick asked on 22 Jul 2013, 03:29 PM
Hello,
I'm looking to implement a custom filter for one of the columns of a GridView.
As I can see, I need to provide myself all the parts of the filter UI, including background color, border, close button,
In this application, the user can change the UI theme, so it is a nightmare to provide the right colors for the UI of my custom filter.

I think that the style of the filter window is defined somewhere in the styles, but they are not documented. Where can I find them?

A better solution would be that you provide a base class for the custom filter, that provides the border, background and close buttons, that we can use in XAML, so we just have to design the inner part of the filter UI.

Patrick

3 Answers, 1 is accepted

Sort by
0
Rossen Hristov
Telerik team
answered on 25 Jul 2013, 09:57 AM
Hello,

I am afraid that we don't have such a hollow "frame" in which you can insert the core of your filtering control UI. When building a custom filtering control the entire UI is up to you from the ground up. You can of course open the default FilteringControl.xaml with Expression Blend and "steal" its UI. Here is a link.

This topic explains how to extract templates with Blend. You can find the pure XAML for all themes in from the Themes folder of your RadControls for Silverlight installation folder.

I hope this helps.

Regards,
Rossen Hristov
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0
Patrick
Top achievements
Rank 2
Iron
Iron
Iron
answered on 25 Jul 2013, 03:39 PM
Hello Rossen,
here is a control that do what I need correctly.
If you're interested, I can convert the Oxygene code to C# (it's very short) and you can include it in the RadControls.

XAML template:
<?xml version="1.0" encoding="utf-8" ?>
<!--
  Template for the osRadGridViewFilterFrame control.
  For a Silverlight application with Telerik's RadControls.
 
  Author: OrdinaSoft
          Patrick Lanz
          Lausanne
          info@ordinasoft.ch
 
  First version:  July 23, 2013
-->
 
 
<ResourceDictionary
  xmlns:osctrl="clr-namespace:OrdinaSoft.Windows.Controls">
 
  <Style TargetType="osctrl:osRadGridViewFilterFrame">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="osctrl:osRadGridViewFilterFrame">
          <Border Background="{StaticResource GridView_FilteringControlBackground}"
                  BorderBrush="{StaticResource GridView_FilteringControlOuterBorder}"
                  BorderThickness="1"
                  CornerRadius="1"
                  Margin="0 2 0 0">
 
            <Border Background="{StaticResource GridView_FilteringControlBackground}"
                    BorderBrush="{StaticResource ControlInnerBorder}"
                    BorderThickness="1"
                    Padding="5">
 
              <Grid>
                <Grid.RowDefinitions>
                  <RowDefinition Height="Auto" />
                  <RowDefinition Height="5" />
                  <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto" />
                  <ColumnDefinition Width="5" />
                  <ColumnDefinition Width="13" />
                </Grid.ColumnDefinitions>
 
                <ContentPresenter Content="{TemplateBinding Header}"
                                  HorizontalAlignment="Left"
                                  VerticalAlignment="Center" />
 
                <tk:RadButton Name="btn_Close"
                              Height="13"
                              HorizontalAlignment="Right"
                              VerticalAlignment="Top"
                              Width="13"
                              Grid.Column="2">
                  <Path Data="M4,4L5,4 5,5 4,5z M0,4L1,4 1,5 0,5z M3,3L4,3 4,4 3,4z M1,3L2,3 2,4 1,4z M2,2L3,2 3,3 2,3z M4,0L5,0 5,1 4,1 4,2 3,2 3,0.99999994 4,0.99999994z M0,0L1,0 1,0.99999994 2,0.99999994 2,2 1,2 1,1 0,1z"
                        Fill="{StaticResource GridView_IndicatorPrimaryColor}"
                        HorizontalAlignment="Center"
                        Height="6"
                        VerticalAlignment="Center"
                        Width="6" />
                </tk:RadButton>
 
                <ContentPresenter Grid.Row="2" Grid.ColumnSpan="3"/>
 
              </Grid>
            </Border>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
</ResourceDictionary>

Oxygene source code:
Namespace OrdinaSoft.Windows.Controls;
 
 
(* Frame to put outside a filter for a RadGridView.
   For a Silverlight application with Telerik's RadControls.
 
 
   Author:  OrdinaSoft
            Patrick Lanz
            Lausanne
            info@ordinasoft.ch
 
   First version: July 23, 2013
*)
 
 
Interface
 
 
  Uses
    System.Windows,
    System.Windows.Controls,
    System.Windows.Controls.Primitives,
 
    Telerik.Windows.Controls;
 
(*---------------------------------------------------------------------------------------------*)
 
  Type
 
    /// <summary>
    ///   Frame to put outside a filter for a <b>RadGridView</b>.
    /// </summary>
    /// <remarks>
    ///   The frame defines the border, background and close button. It uses the colors of the
    ///   current Telerik theme.
    /// </remarks>
 
    [TemplatePart (Name := 'btn_Close', &Type := TypeOf (ButtonBase))]
 
    osRadGridViewFilterFrame = Public Class (
      HeaderedContentControl
    )
 
    Private
 
    {-- Method --}
 
      /// <summary>
      ///   Event handler called when the user wants to close the filter.
      /// </summary>
      /// <param name="Sender">Sender of the event.</param>
      /// <param name="Args">Arguments for the event.</param>
      Method DoClose (Sender : Object; Args : EventArgs);
 
    Public
 
    {-- Constructor --}
 
      /// <summary>
      ///   Initializes an instance of the control.
      /// </summary>
      Constructor;
 
    {-- Method --}
 
      /// <summary>
      ///   Called when the template is applied to the control.
      /// </summary>
      Method OnApplyTemplate; Override;
 
    End;
 
(*---------------------------------------------------------------------------------------------*)
 
Implementation
 
(*---------------------------------------------------------------------------------------------*)
(* Constructor. *)
 
  // <summary>
  //   Initializes an instance of the control.
  // </summary>
 
  Constructor osRadGridViewFilterFrame;
 
  Begin
    DefaultStyleKey := TypeOf (osRadGridViewFilterFrame)
  End;
 
(*---------------------------------------------------------------------------------------------*)
(* Template. *)
 
  // <summary>
  //   Called when the template is applied to the control.
  // </summary>
 
  Method osRadGridViewFilterFrame.OnApplyTemplate;
 
  Begin
    With Matching Button := ButtonBase (GetTemplateChild ('btn_Close')) Do
      Button.Click += DoClose;
 
    Inherited OnApplyTemplate
  End;
 
(*---------------------------------------------------------------------------------------------*)
(* Closing the filter. *)
 
  // <summary>
  //   Event handler called when the user wants to close the filter.
  // </summary>
  // <param name="Sender">Sender of the event.</param>
  // <param name="Args">Arguments for the event.</param>
 
  Method osRadGridViewFilterFrame.DoClose (
    Sender : Object;
    Args   : EventArgs
  );
 
  Begin
    Var Parent := ParentOfType <Popup>;
    Parent:IsOpen := False
  End;
 
(*---------------------------------------------------------------------------------------------*)
 
End.

Exemple of use (with french text):
<!--
   Filter for the address of a member.
   For the ASLOCA project.
 
   Author:  OrdinaSoft
            Patrick Lanz
            Lausanne
            info@ordinasoft.ch
 
   First version: July 23, 2013
-->
 
 
<os:osRadGridViewFilter
  x:Class="Asloca.Member.MemberAddressFilter"
 
  <os:osRadGridViewFilterFrame Header="Adresses">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="5" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="5" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="10" />
        <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="5" MaxWidth="5" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
 
 
      <TextBlock Style="{StaticResource Label}"
                 Text="Rue:" />
      <TextBox Name="txt_Address"
               Grid.Column="2" Grid.ColumnSpan="2" />
 
 
      <TextBlock Style="{StaticResource Label}"
                 Text="Numéro:"
                 Grid.Row="2" />
      <StackPanel Orientation="Horizontal"
                  Grid.Row="2" Grid.Column="2">
        <TextBlock Style="{StaticResource Label}"
                   Text="du:" />
        <TextBox Name="txt_FirstNo"
                 Margin="5 0"
                 Width="30" />
        <TextBlock Style="{StaticResource Label}"
                   Text="au:" />
        <TextBox Name="txt_LastNo"
                 Margin="5 0 0 0"
                 Width="30" />
      </StackPanel>
 
      <CheckBox Name="chk_AlsoOld"
                Content="Rechercher dans les anciennes adresses"
                Grid.Row="4" Grid.ColumnSpan="4" />
 
 
      <Grid Grid.Row="6" Grid.ColumnSpan="4">
        <Grid.ColumnDefinitions>
          <ColumnDefinition />
          <ColumnDefinition Width="5" />
          <ColumnDefinition />
        </Grid.ColumnDefinitions>
 
        <Button Content="Filtrer"
                Click="DoFilter" />
 
        <Button Content="Annuler le filtre"
                Click="DoClearFilter"
                Grid.Column="2" />
      </Grid>
 
 
    </Grid>
  </os:osRadGridViewFilterFrame>
</os:osRadGridViewFilter>

Patrick
0
Rossen Hristov
Telerik team
answered on 26 Jul 2013, 07:06 AM
Hello,

Thank you for posting your control to the public forum. We appreciate this. While I doubt that we will actually check this in the main source control of RadControls, it will be available here on this public forum forever, so we might direct future customers to use your implementation.

Once again, I would like to thank you.

Regards,
Rossen Hristov
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Tags
GridView
Asked by
Patrick
Top achievements
Rank 2
Iron
Iron
Iron
Answers by
Rossen Hristov
Telerik team
Patrick
Top achievements
Rank 2
Iron
Iron
Iron
Share this question
or