我正在从WinForms迁移到WPF,并且需要自定义绘制网格拆分器,如下所示。这是我的WinForms实现:



在WinForms中,易于实现。我从Splitter类继承而来,只是重写了OnPaint()方法。

现在,我试图弄清楚如何进行。我不知道如何在XAML中使用控件模板,因为我需要在用户移动滚动条时重新绘制形状。似乎我需要在后面编写代码,但是我不知道该如何进行。

我应该如何进行?一个简单的示例(例如从(0,0)(gridsplitter.right, gridsplitter.bottom)画一条线)会有所帮助。

最佳答案

最后,我创建了一个Canvas派生的类来执行渲染:

public class DiffSplitterCanvas : Canvas
{
    public DiffSplitterCanvas()
    {
        this.SnapsToDevicePixels = true;
    }

    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);
        // draw your stuff here
    }
}


并从XAML代码中将其引用为控件模板:

<GridSplitter Grid.Column="1" Width="50" HorizontalAlignment="Stretch">
    <GridSplitter.Template>
         <ControlTemplate TargetType="{x:Type GridSplitter}">
            <custom:DiffSplitterCanvas/>
         </ControlTemplate>
    </GridSplitter.Template>
</GridSplitter>

关于c# - 如何自定义绘制GridSplitter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30081934/

10-10 16:08