Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

Îåêßíçóå áðü ôï ìÝëïò plasmatek. Τελευταία δημοσίευση από το μέλος KelMan στις 04-04-2008, 11:52. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-03-2008, 10:53 41181

    απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    προσπαθώ να ενεργοποιώ/απενεργοποιώ δυναμικά το header griper (αυτό που επιτρέπει στον end-user να κάνει resize το width του gridviewcolumn) ενός gridviewcolumn σε ένα listview.

    μέχρις στιγμής το έχω πετύχει με το να επεξεργάζομαι το visual tree του listview, να βρίσκω το header griper που είναι ένα Thumb και να του αλλάζω το visibility.

    αναρωτιέμαι αν θα μπορούσα να πετύχω το ίδιο με κάποιο controltemplate (που στην ουσία θα κάνει bind το visibility των Thumb gridviewcolumn).

  •  28-03-2008, 12:50 41186 σε απάντηση της 41181

    Απ: απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    Μπορείς, είναι λίγο περιπέτεια να βγεις στο PART_HeaderGripper element καθώς είναι αρκετά μπλεγμένο στην ιεραρχία. Από την άλλη, το θέμα είναι σε τι θα το κάνεις bind.
    Vir prudens non contra ventum mingit
  •  28-03-2008, 13:35 41187 σε απάντηση της 41186

    Απ: απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    ε, θα μπορούσα να έχω ένα μικρό array από Visibility states και να κάνω bind εκεί. Και όταν θέλω να θέλω να επέμβω στο Visibility, να πειράζω το αντίστοιχο στοιχείο του array και μετά notifypropertychange.

    κάποια ιδέα/υπόδειγμα/οτιδήποτε για πώς θα επέμβω στο PART_HeaderGripper μέσα από κάποιο controltemplate?

  •  29-03-2008, 09:24 41197 σε απάντηση της 41187

    Απ: απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    Ήθελα να σου απαντήσω απο χθες για το πως θα το κάνεις από το Blend αλλά είχα ένα ατύχημα και θα είμαι μονόχερος για καιρό μάλλον... Χονδρικά, κάνε edit ένα template copy και μετά εξερεύνησε την ιεραρχία. Όποιο element έχει template μπαίνε και κάνε edit. Σε όσα δεν έχουν, δες από το menu Object, το style και κάντο edit. Αν δεν το βρεις τελικά, όταν θα είμαι σε καλύτερη κατάσταση θα σου δώσω πιο αναλυτικές οδηγίες.
    Vir prudens non contra ventum mingit
  •  31-03-2008, 11:07 41214 σε απάντηση της 41197

    Απ: απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    Καταρχάς, περαστικά σου. Σου εύχομαι όσο πιο  γρήγορη και ανόδυνη ανάρρωση.

    Εχμ, βασικά αυτό που φτιάχνω είναι ένα extension για το listview με χρήση  attached properties ώστα να υποστηρίζει  sorting και  enable/disable των διάφορων στηλών. Δυστυχώς, ο μόνος τρόπος να κάνεις disable μια στήλη είναι να θέσεις το width της ίσο με το 0. Βέβαια, έτσι τίποτε δεν αποτρέπει τον end user από το να χρησιμοποιήσει το gripper και να την εμφανίσει ξανά. Οπότε πρέπει να γίνει hide και το αντίστοιχο gripper.  Για την ώρα, το βρίσκω με την βοήθεια του VisualTreeHelper, απλά αναρωτιέμαι μήπως θα μπορούσα να το βρω και με άλλο τρόπο, μιας και υποχρεωτικά έχει πάντα το ίδιο όνομα: PART_HeaderGripper.

  •  04-04-2008, 11:52 41329 σε απάντηση της 41214

    Απ: απενεργοποίηση του header griper ενός gridviewcolumn σε ένα listview

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    <ResourceDictionary
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
      <!-- Resource dictionary entries should be defined here. -->
      <SolidColorBrush x:Key="ListBorder" Color="#828790"/>
      <Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}">
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
              <Grid SnapsToDevicePixels="true" Background="{TemplateBinding Background}">
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="*"/>
                  <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                  <RowDefinition Height="*"/>
                  <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <DockPanel Margin="{TemplateBinding Padding}">
                  <ScrollViewer Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" DockPanel.Dock="Top">
                    <GridViewHeaderRowPresenter Margin="2,0,2,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderContainerStyle="{DynamicResource GridViewColumnHeaderStyle1}" ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}" ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}" Columns="{Binding Path=TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"/>
                  </ScrollViewer>
                  <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" KeyboardNavigation.DirectionalNavigation="Local" CanContentScroll="{TemplateBinding CanContentScroll}"/>
                </DockPanel>
                <ScrollBar Cursor="Arrow" x:Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Grid.Row="1" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0.0" Value="{Binding Path=HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" Orientation="Horizontal" ViewportSize="{TemplateBinding ViewportWidth}"/>
                <ScrollBar Cursor="Arrow" x:Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0.0" Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" Orientation="Vertical" ViewportSize="{TemplateBinding ViewportHeight}"/>
                <DockPanel Background="{Binding Path=Background, ElementName=PART_VerticalScrollBar}" Grid.Column="1" Grid.Row="1" LastChildFill="false">
                  <Rectangle Width="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Fill="White" DockPanel.Dock="Left"/>
                  <Rectangle Height="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Fill="White" DockPanel.Dock="Top"/>
                </DockPanel>
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
      <Style x:Key="ListViewStyle1" TargetType="{x:Type ListView}">
        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
        <Setter Property="BorderBrush" Value="{StaticResource ListBorder}"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Foreground" Value="#FF042271"/>
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
        <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
        <Setter Property="VerticalContentAlignment" Value="Center"/>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
              <Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" RenderMouseOver="{TemplateBinding IsMouseOver}">
                <ScrollViewer Padding="{TemplateBinding Padding}" Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
                  <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </ScrollViewer>
              </Microsoft_Windows_Themes:ListBoxChrome>
              <ControlTemplate.Triggers>
                <Trigger Property="IsGrouping" Value="true">
                  <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="false">
                  <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
      <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 Path=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 HorizontalAlignment="Center" Width="1" Fill="{TemplateBinding Background}"/>
              </Border>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
      <Style x:Key="GridViewColumnHeaderStyle1" 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" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,1,0,1">
                  <Grid>
                    <Grid.RowDefinitions>
                      <RowDefinition MaxHeight="7"/>
                      <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Rectangle x:Name="UpperHighlight" Visibility="Collapsed" Fill="#FFE3F7FF"/>
                    <Border Grid.RowSpan="2" Padding="{TemplateBinding Padding}">
                      <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0,0,0,1" x:Name="HeaderContent" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/>
                    </Border>
                  </Grid>
                </Border>
                <Border Margin="1,1,0,0" x:Name="HeaderHoverBorder" BorderThickness="1,0,1,1"/>
                <Border Margin="1,0,0,1" x:Name="HeaderPressBorder" BorderThickness="1,1,1,0"/>
                <Canvas>
                  <Thumb x:Name="PART_HeaderGripper" Style="{StaticResource GridViewColumnHeaderGripper}" IsEnabled="{Binding Path=IsChecked, ElementName=theCheckbox, Mode=Default}"/>
                </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 Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}" Opacity="0.4697" Fill="#FF000000"/>
                  </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" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,1,0,1"/>
                  <ControlTemplate.Triggers>
                    <Trigger Property="Height" Value="Auto">
                      <Setter Property="MinHeight" Value="20"/>
                    </Trigger>
                  </ControlTemplate.Triggers>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Trigger>
        </Style.Triggers>
      </Style>
    </ResourceDictionary>

    Αυτό είναι το template από το ListView που έχει binded το gripper σε ενα checkbox για δοκιμή. Δες τη γραμμή 126

     


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems