3

我正在向 CavnasObject (Size 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 的值取自代码。

4

1 回答 1

1

好的,经过测试,我发现您的 XAML 可能是问题所在。您的画布是在 DataGrid 后面的可视树中创建的,因此任何 Line 都将显示在 DataGrid 后面。而且由于您使用 StackPanel 作为根元素,我不确定您的 Line 将在哪里结束。要解决此问题,请将您的 XAML 重写为与此类似的内容:

<Grid Grid.Column="1">
  <DataGrid/>
  <Canvas x:Name="lineCanvas"/>
</Grid>
于 2012-07-10T14:57:12.120 回答