ich auch in diesem gestolpert. Um es zu lösen, musste ich zwei Dinge tun:
- Ändern Sie die ControlTemplate von ListView-Header.
- Behandeln Sie das DragDelta-Ereignis des Thumb in der ControlTemplate.
Der Header von ListView ist GridViewColumnHeader. Im Folgenden finden Sie eine vereinfachte Version von ControlTemplate von GridViewColumnHeader. Wie wir sehen können, verwendet es in einem Canvas einen Thumb, um den Zieh-/Größenänderungs-Effekt zu erzeugen.
PS: Um die komplette Gridviewcolumnheader Control erhalten Sie bitte How to grab WPF 4.0 control default templates?
<ControlTemplate TargetType="GridViewColumnHeader">
<Grid SnapsToDevicePixels="True">
<Border BorderThickness="0,1,0,1" Name="HeaderBorder" ...>
<!-- omitted -->
</Border>
<Border BorderThickness="1,0,1,1" Name="HeaderHoverBorder" Margin="1,1,0,0" />
<Border BorderThickness="1,1,1,0" Name="HeaderPressBorder" Margin="1,0,0,1" />
<Canvas>
<Thumb Name="PART_HeaderGripper">
<!-- omitted -->
</Thumb>
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<!-- omitted -->
</ControlTemplate.Triggers>
So Um die Größe von Gridviewcolumnheader beziehen zu begrenzen, müssen wir Thumb Drag Ereignisse (Drag, Dragdelta Haken , DragCompleted ... usw.).
Alles was wir brauchen, ist das DragDelta Ereignis, solange wir die MinSize innerhalb der DragDeltaEventHandler kennen.
Im Folgenden ist XAML mit Kommentar geändert.
- Bind Gridviewcolumnheader des MinWidth auf Leinwand von MinWidth:
<Grid Width="500">
<Border BorderBrush="Black" BorderThickness="2" Margin="20">
<ListView SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Header 1" Width="Auto">
<!-- Apply a style targeting GridViewColumnHeader with MinWidth = 80 and a ControlTemplate -->
<GridViewColumn.HeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="MinWidth" Value="80" />
<Setter Property="Control.Template" Value="{DynamicResource myGridViewColumnHeaderControlTemplate}" />
</Style>
</GridViewColumn.HeaderContainerStyle>**
</GridViewColumn>
<GridViewColumn Header="Header 2" Width="Auto" />
</GridView>
</ListView.View>
</ListView>
</Border>
</Grid>
Im myGridViewColumnHeaderControlTemplate einige XAML hinzuzufügen.
- Schließen Sie das DragDelta-Ereignis von Thumb an.
<ControlTemplate x:Key="TemplateGridViewColumnHeader" TargetType="GridViewColumnHeader">
<!-- omitted -->
<Canvas MinWidth="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=MinWidth, Mode=OneTime}">
<Thumb x:Name="PART_HeaderGripper" DragDelta="myGridViewColumnHeader_DragDelta">
Schließlich wird die myGridViewColumnHeader_DragDelta Funktion:
private void myGridViewColumnHeader_DragDelta(object sender, DragDeltaEventArgs e)
{
DependencyObject parent = sender as DependencyObject;
try
{
do
{
parent = VisualTreeHelper.GetParent(parent as DependencyObject);
} while (parent.GetType() != typeof(Canvas));
Canvas canvas = parent as Canvas;
if (canvas.ActualWidth + e.HorizontalChange < canvas.MinWidth)
{
e.Handled = true;
}
}
catch
{
}
}
Dies ist die einzige Art, wie ich Arbeit finden. Hoffe, es gibt einen einfacheren Weg.
Gridviewcolumn haben nicht einmal eine MinWidth Eigenschaft. Sie können keine Eigenschaft in einer Stil- oder Steuerelementvorlage festlegen, die nicht vorhanden ist. Bitte posten Sie Ihr XAML für wie Sie eine MinWidth auf eine GridViewColumn festlegen. – Paparazzi
In der Verknüpfung zeigt es die Verwendung des Thumb und die Handhabung des DragDelta-Ereignisses, um die MinWidth zu erreichen. Gibt es eine Möglichkeit, dies in einer Kontrollvorlage zu erreichen? – Elan