2010-03-14 45 views
4

是否可以增加从用户可以抓取的网格分离器的距离?增加WPF GridSplitter鼠标抓取阈值

我的分配器宽度只有1px。我希望能够从更远的距离抓住分离器。

因为现在我必须将鼠标指向确切的1px行来抓取它。

而且分离器还必须在宽度

回答

13

被1像素,您可以同时保持它看起来像它的小改GridSplitter的实际大小。这会给你一个7像素宽度的区域抓住它在1个像素,同时显示:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition Width="1"/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <GridSplitter Grid.Column="1" 
        Margin="-3,0" 
        BorderThickness="3,0" 
        BorderBrush="Transparent" 
        HorizontalAlignment="Stretch" /> 
</Grid> 

的例子是使用的给分流了自己的专栏,但同样的原则方法,如果它向左或向右排列的应用一个共享列。

+3

这是正确的,但我不得不改变网格的ZIndex,因为它的右侧被DockPanel隐藏。 – ErikTJ 2010-03-16 20:57:47

+0

保证金=“ - 3,0”的目的是什么?你希望水平分离器左对齐在7像素区域而不是居中? – 2015-12-08 22:42:05

+0

负边距为3 px透明边框在任一侧创建额外空间以填充布局。如果没有这些分割器,只有1 px列可以渲染。 – 2015-12-15 18:56:50

2

我无法获得John Bowen的解决方案。它看起来像它的工作,但它似乎像分离器只有1像素的抢占空间。

我落得这样做:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <Stackpanel Grid.Row="0"/> 
    <GridSplitter 
     Grid.Row="1" 
     HorizontalAlignment="Stretch" 
     BorderBrush="DarkGray" 
     Height="6" 
     Background="Transparent" 
     BorderThickness="0,1,0,0" 
     Margin="0,0,0,-4"/> 
    <Stackpanel Grid.Row="2"/> 
</Grid> 

这使分离器高度为6个像素,但仅显示了1个像素顶部边界线。您使用((高度/ 2) - 1)的负底部边距以便将该顶部边距线居中在该行中间。

背景是透明的,否则你会看到6个像素的灰色或w/e的默认颜色是。如果您使用Blend挖掘GridSplitter的控件模板,您会发现它只是一个带边框的样式的Rectangle或类似的东西。

+0

这种技术的问题是它把灰线放在6个像素区域的顶部,你可以抓住灰线。你确定你没有简单地忘记翻译约翰的答案从垂直到水平的一些值吗?这适用于我(5个像素区域抓取,区域中心灰线):'' – 2015-12-08 22:43:29