WPF GridSplitter没有经过热门测试?

时间:2014-06-12 06:09:31

标签: c# wpf .net-4.0 gridsplitter

我似乎遇到了WPF GridSplitter的一个奇怪问题。

如果我这样做:

<Window x:Class="WpfApplication20.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="102" />
            <RowDefinition Height="1" />
            <RowDefinition Height="192" />
        </Grid.RowDefinitions>
        <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ResizeDirection="Rows" Background="Black"></GridSplitter>
        <Canvas Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="AliceBlue"></Canvas>
        <Canvas Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Yellow"></Canvas>       
    </Grid>
</Window>

我可以看到GridSplitter,但我无法与它交互 - 将鼠标悬停在它上面,光标不会改变,也无法用它调整行数。

现在,如果我更改添加到网格中的元素的顺序:

<Window x:Class="WpfApplication20.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="102" />
            <RowDefinition Height="1" />
            <RowDefinition Height="192" />
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="AliceBlue"></Canvas>
        <Canvas Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Yellow"></Canvas>
        <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ResizeDirection="Rows" Background="Black"></GridSplitter>
</Grid>
</Window>

然后GridSplitter工作正常。 请注意,我将Panel.ZIndex="1"放在GridSplitter的第一种情况下,它也可以工作。

然后我尝试了这个(将UseLayoutRounding="True"添加到Window):

<Window x:Class="WpfApplication20.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" UseLayoutRounding="True">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="102" />
            <RowDefinition Height="1" />
            <RowDefinition Height="192" />
        </Grid.RowDefinitions>
        <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ResizeDirection="Rows" Background="Black"></GridSplitter>
        <Canvas Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="AliceBlue"></Canvas>
        <Canvas Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Yellow"></Canvas>
</Grid>
</Window>

这给了我一个奇怪的行为:最初绘制的Gridsplitter高度为2px(子像素定位?但所有网格行都是整数高度)。如果我向上调整行的大小,GridSplitter将继续工作。如果我向下调整行的大小,我将达到以1px的高度绘制GridSplitter的点,一旦我释放鼠标,我就无法再与GridSplitter交互。

问题:

  1. 为什么GridSplitter在前两种情况下依赖Z-order工作?
  2. 为什么GridSplitter在第三种情况下“间歇性地”工作?

0 个答案:

没有答案