私もこの一つにつまずきました。それを解決するには、私は2つのことをしなければなりませんでした。
- ListViewのヘッダーのControlTemplateを変更します。
- ControlTemplate内のThumbのDragDeltaイベントを処理します。
ListViewのヘッダーはGridViewColumnHeaderです。 以下はGridViewColumnHeaderのControlTemplateの簡略版です。ご覧のとおり、CanvasでThumbを使用してドラッグ/サイズ変更エフェクトを作成します。
PS:完全GridViewColumnHeaderのControlTemplateを得られるようGridViewColumnHeaderの大きさを制限するために、我々は親指のドラッグイベント(DragStarted、DragDeltaをフックする必要が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>
を参照してください。 、DragCompleted ...など)。
DragDeltaEventHandler内のMinSizeを知る限り、DragDeltaイベントが必要です。
以下は、XAMLを修正したものです。 myGridViewColumnHeaderControlTemplateで
<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>
にいくつかのXAMLを追加:キャンバスののminWidthに
- バインドGridViewColumnHeaderさんのminWidth。
- ThumbのDragDeltaイベントをフックします。
<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">
最後にmyGridViewColumnHeader_DragDelta機能:
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
{
}
}
これは私が働いて見つける唯一の方法です。簡単な方法があることを願ってください。コード内
<GridView>
<GridViewColumn>
<GridViewColumnHeader Content="HeaderContent" SizeChanged="HandleColumnHeaderSizeChanged"/>
...
:あなたは、サイズ変更を処理することができGridViewColumnHeaderを使用する場合は
GridViewColumnでものminWidthプロパティがありません。存在しないスタイルまたはコントロールテンプレートでプロパティを設定することはできません。 GridViewColumnにMinWidthを設定する方法については、XAMLを投稿してください。 – Paparazzi
このリンクでは、Thumbを使用し、DragDeltaイベントを処理してMinWidthを実行する方法を示します。コントロールテンプレートでこれを達成する方法はありますか? – Elan