当边距设置为在底部半网格中显示时,网格项不可见

时间:2011-07-11 15:30:55

标签: wpf wpf-controls

我有一个带有重叠分隔符的网格,我将其用作网格的光标。我通过将边距设置为网格ActualHeight的百分比,以编程方式在网格上移动分隔符。这可以正常工作,直到边距设置为大于(grid.ActualHeight / 2),此时分隔符不再可见。

我尝试将垂直对齐(默认为顶部)设置为Bottom或Center,并相应地更改位置,结果相似。

网格隐藏分隔符有什么原因吗?如何确保分隔符可见?

谢谢, 斯图尔特

编辑:

这是网格的XAML。边框以编程方式添加到网格中,这就是网格包含行和列的原因。

    <Grid Name="graph1" Grid.Row="1" Margin="2" MouseLeftButtonDown="MouseDown" Background="#00000000">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Separator Name="graph1Cursor" Grid.RowSpan="5" Grid.ColumnSpan="6" VerticalAlignment="Top"/>
    </Grid>

我用来设置保证金的代码:

    graph1Cursor.Margin = new Thickness(0, y, 0, y);

其中y是光标位置相对于网格的ActualHeight的高度。

2 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,虽然我不确定为什么解决方案比原始解决方案更有效...我没有直接将分隔符放在Grid中,而是将其嵌套在StackPanel中。除此之外的所有代码保持不变。

以下是具有嵌套StackPanel的网格的XAML:

    <Grid Name="graph1" Grid.Row="1" Margin="2" MouseLeftButtonDown="MouseDown" Background="#00000000">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <StackPanel Grid.RowSpan="5" Grid.ColumnSpan="6">
                <Separator Name="graph1Cursor" VerticalAlignment="Top" />
            </StackPanel>
        </Grid>

我会将此标记为已回答。如果有人有更好的解决方案,我会发表意见。

答案 1 :(得分:0)

另一种解决方案是从分隔符设置Grid.Row-Property而不是Grid.RowSpan-Property,而在代码中只设置Row-Property:

的Xaml:

<Grid Name="graph1" Grid.Row="1" Margin="2" Background="#00000000">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Button Click="Button_Click"/>
    <Separator Name="graph1Cursor" Grid.Row="1" Grid.ColumnSpan="6" VerticalAlignment="Top"/>
</Grid>

在你的代码中,你可以从graph1Cursor中设置Row-Property:

Grid.SetRow(graph1Cursor, 4);