从XAML调用时,FrameworkElement方法不会绘制网格-但从Window_loaded可以绘制网格

我是Youcef

我正在wpf中重建自2011年以来运行良好的vb6应用程序。我的应用程序处理11个文档。在vb6中,我在MDI中使用了11种形式。

在wpf中,我使用的是名为Hold的Canvas。该画布包含11个我称为Doc的FrameworkElement实例。

Doc有一些方法可以为我称为Cell的类绘制形状和文本。为了将单元格放置在Doc中,需要Doc绘制网格。为此我有一个布尔字段(布尔_showGrid;),如果为true,则Doc将绘制网格。

我的问题是从xaml调用时Doc FrameworkElement不会绘制网格。但是从Window_Loaded可以。

这是Doc FrameworkElement的一部分

public class Doc : FrameworkElement
{
    VisualCollection paper;
    DrawingVisual cellMaker;

    bool _showGrid;

    public Doc()
    {
        paper = new VisualCollection(this);
        //SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
    }

    public bool showGrid
    {
        set
        {
            _showGrid = value;
            if (_showGrid)
            {
                drawGrid();
            }
        }
    }

    private void drawGrid()
    {
        DrawingVisual grid = new DrawingVisual();
        using(DrawingContext dc = grid.RenderOpen())
        {
            for(int i = 0; i <= Width; i += 18)
            {
                dc.DrawLine(new Pen(Brushes.OrangeRed, 1), new Point(i, 0), new Point(i, Height));
            }
            for(int j = 0; j <= Height; j += 18)
            {
                dc.DrawLine(new Pen(Brushes.OrangeRed, 1), new Point(0, j), new Point(Width, j));
            }
            dc.Close();
        }
        paper.Add(grid);
    }

这是xaml,其中在showGrid中创建的docs的documentReceipt实例设置为true时,女巫不起作用:

<ScrollViewer Grid.Row="1" Grid.Column="0">
        <Canvas Name="Hold" Width="21cm" Height="29.7cm" Background="White" Margin="17">
            <dc:Doc Name="documentsReceipt"
                    Width="{Binding Path=ActualWidth,ElementName=Hold}"
                    Height="{Binding Path=ActualHeight,ElementName=Hold}"
                    showGrid="True"
                    Loaded="documentsReceipt_Loaded">
            </dc:Doc>
            <TextBox Name="txt" 
                     TextChanged="txt_TextChanged" 
                     KeyDown="txt_KeyDown"
                     PreviewKeyDown="txt_PreviewKeyDown"/>
        </Canvas>
    </ScrollViewer>

这是当我忽略了应用程序documentReceipt=trueWindow_Loaded

private void Window_Loaded(object sender, RoutedEventArgs e)
{
   //documentsReceipt.showGrid = true;
}

窗无格

这是当我启用带有网格的showGrid窗口时的输出

gomi42

通常,您实现的控件有点不同。首先,您需要一个依赖项属性以ShowGrid使其可绑定。接下来是覆盖OnRender以绘制形状(或其他形状)。这是控件的完整实现:

public class Doc : FrameworkElement
{
    public bool ShowGrid
    {
        get { return (bool)GetValue (ShowGridProperty); }
        set { SetValue (ShowGridProperty, value); }
    }

    public static readonly DependencyProperty ShowGridProperty =
        DependencyProperty.Register ("ShowGrid", typeof (bool), typeof (Doc), new FrameworkPropertyMetadata (false, FrameworkPropertyMetadataOptions.AffectsRender));

    protected override void OnRender (DrawingContext dc)
    {
        if (ShowGrid)
        {
            for (int i = 0; i <= ActualWidth; i += 18)
            {
                dc.DrawLine (new Pen (Brushes.OrangeRed, 1), new Point (i, 0), new Point (i, Height));
            }

            for (int j = 0; j <= ActualHeight; j += 18)
            {
                dc.DrawLine (new Pen (Brushes.OrangeRed, 1), new Point (0, j), new Point (Width, j));
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 xaml 中绘制圆形以适应网格

来自分类Dev

在Winform图表的背景上绘制而不会过度绘制网格

来自分类Dev

网格使用过多的绘制调用

来自分类Dev

用Matplotlib绘制网格

来自分类Dev

用SpriteKit绘制网格

来自分类Dev

绘制网格偏移

来自分类Dev

用Matplotlib绘制网格

来自分类Dev

使用CAShapeLayer绘制网格

来自分类Dev

覆盖网格而不是在网格之上绘制

来自分类Dev

在画布上绘制网格时的网格大小

来自分类Dev

Java Swing:绘制网格问题

来自分类Dev

使用比例绘制网格或矩形

来自分类Dev

在matplotlib中绘制网格图案

来自分类Dev

摆动绘制网格。奇怪的结果

来自分类Dev

以网格形式绘制精灵

来自分类Dev

在CGAL中绘制彩色网格

来自分类Dev

摆动绘制网格。奇怪的结果

来自分类Dev

使用Swing绘制Java网格

来自分类Dev

在python中绘制彩色网格

来自分类Dev

在网格中绘制位置

来自分类Dev

使用网格在金属中绘制

来自分类Dev

绘制更新的WebGL网格/曲面的最佳方法

来自分类Dev

绘制网格最有效的方法是什么?

来自分类Dev

有没有一种方法可以使用已经绘制的图形来创建图形网格?

来自分类Dev

调用方法和绘制

来自分类Dev

Python在网格网格中的节点上绘制值

来自分类Dev

在Matlab中绘制2D网格

来自分类Dev

[WPF]如何在画布上绘制网格?

来自分类Dev

在Cartopy地图中绘制网格线