WPF中添加的代码行未显示- XAML已显示

3

我正在使用代码向CanvasObject(大小为0,0)添加一条线元素。但它没有显示出来。所以我在XAML中使用了相同属性的相同线对象。在XAML中它会被显示出来,但在C#中不会。 以下是我的C#代码:

Line line = new Line()
{
    X1 = points[0].X,
    Y1 = points[0].Y,
    X2 = points[1].X,
    Y2 = points[1].Y,
    Stroke = new SolidColorBrush(Colors.Red),
    StrokeThickness = 4,
    Visibility = System.Windows.Visibility.Visible
};
lineCanvas.Children.Add(line);

这里没有显示。 而这一行是显示的:

<StackPanel Grid.Column="1">
    <Grid Height="0">
        <Canvas Name="lineCanvas">
            <Line X1="1" X2="240" Y1="33" Y2="33" StrokeThickness="4" Stroke="Red"/>
        </Canvas>
    </Grid>
    <DataGrid Name="dataGrid" Grid.Column="0" ItemsSource="{Binding ViewMap}" CanUserReorderColumns="False" 
              CanUserSortColumns="False" AutoGenerateColumns="False" AllowDrop="True"
              DragEnter="dataGrid_DragEnter" Drop="dataGrid_Drop" SelectionUnit="FullRow" 
              HeadersVisibility="Column" IsReadOnly="True" Panel.ZIndex="0" MouseDown="dataGrid_MouseDown">
        <DataGrid.CellStyle>#
....
...

如果你自己在想为什么网格的高度为0。我正在使用线连接数据表格的单元格。 要放置线条,我使用一个非常小的画布对象,并且只需在画布上显示线条。 那么,有人有什么想法出了什么问题吗?XAML值是从代码中获取的。

1
你确定 points[0]points[1] 的值与你在 Xaml 中使用的值匹配吗? - Dan Puzey
1个回答

1

好的,在测试后我发现你的XAML可能是问题所在。你的Canvas是在DataGrid后面的可视树中创建的,因此任何线都会显示在DataGrid后面。而且由于你使用了StackPanel作为根元素,我不确定你的线会出现在哪里。为了解决这个问题,请将你的XAML重写为类似于以下内容:

<Grid Grid.Column="1">
  <DataGrid/>
  <Canvas x:Name="lineCanvas"/>
</Grid>

问题中的XAML工作是因为Panel.ZIndex被手动设置以覆盖此设置。 - H.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接