Wpf 如何直观地表示对象?

Wpf 如何直观地表示对象?,wpf,Wpf,我想知道如何在WPF中直观地表示对象?例如,我有一个类,它的一个形状作为一个文件/属性,当我将对象添加到面板时,我想用它来表示对象,例如画布。我知道我可以继承形状并覆盖定义几何体属性,但我想知道是否还有其他方法?有多种方法可以做到这一点 如果您的元素没有呈现任何内容,只是位于可视化树中(出于某种特殊原因),那么要在可视化树中承载它,您必须从visual类继承它。继承时,不要忘记覆盖Visual类中的所有虚拟方法 如果它需要在UI上呈现(我想这是您的需求),那么它必须从UIElement类继承。在

我想知道如何在WPF中直观地表示对象?例如,我有一个类,它的一个形状作为一个文件/属性,当我将对象添加到面板时,我想用它来表示对象,例如画布。我知道我可以继承形状并覆盖定义几何体属性,但我想知道是否还有其他方法?

有多种方法可以做到这一点

  • 如果您的元素没有呈现任何内容,只是位于可视化树中(出于某种特殊原因),那么要在可视化树中承载它,您必须从
    visual
    类继承它。继承时,不要忘记覆盖
    Visual
    类中的所有虚拟方法

  • 如果它需要在UI上呈现(我想这是您的需求),那么它必须从
    UIElement
    类继承。在这里,您可以通过重写名为
    OnRender()
    UIElement
    类的虚拟方法来渲染它。此方法接收一个
    DrawingContext
    参数,该参数可以根据需要绘制形状<代码>装饰器通常是这样工作的

  • 如果需要诸如
    Style
    DataContext
    Tag
    等属性,则可能必须从
    FrameworkElement
    继承

  • 如果希望可视化对象包含另一个
    visual
    对象,则它可以从
    FrameworkContentElement
    继承


  • 您可以使用
    DataTemplate
    来表示数据对象:

    <DataTemplate DataType="{x:Type local:yourObject}">
        ... your visuals
    </DataTemplate>
    
    
    ... 你的视觉效果
    
    谢谢,解释得很好。onRender就是我要找的。
    DataTemplate
    是否具有相同的效果?我明白了。我认为
    DataTemplate
    的唯一缺点是很难在代码中创建,而不是在XAML中创建。