C# 自定义Wpf无外观控件…动态决定控件类型

C# 自定义Wpf无外观控件…动态决定控件类型,c#,wpf,inheritance,C#,Wpf,Inheritance,如何在运行时决定自定义无外观控件的类型。我必须在运行时决定控件的类型(即,是textbox还是combo)(实际上是在绑定某些依赖项属性时)。我该如何做?我可以定义在运行时从何处继承吗?您可以使用设置控件的ControlTemplate属性的触发器 <Style TargetType={x:Type local:MyControl}> <Style.Triggers> <Trigger Property="MyProperty" Value="MyVal

如何在运行时决定自定义无外观控件的类型。我必须在运行时决定控件的类型(即,是textbox还是combo)(实际上是在绑定某些依赖项属性时)。我该如何做?我可以定义在运行时从何处继承吗?

您可以使用设置控件的ControlTemplate属性的触发器

<Style TargetType={x:Type local:MyControl}>
  <Style.Triggers>
    <Trigger Property="MyProperty" Value="MyValue1">
      <Setter Property="ControlTemplate">
        <Setter.Value>
          <ControlTemplate TargetType={x:Type local:MyControl}>
            <!-- first template -->
          </ControlTemplate
        </Setter.Value>
      </Setter>
    </Trigger>
    <Trigger Property="MyProperty" Value="MyValue2">
      <Setter Property="ControlTemplate">
        <Setter.Value>
          <ControlTemplate TargetType={x:Type local:MyControl}>
            <!-- second template -->
          </ControlTemplate
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers


可以使用设置控件的ControlTemplate属性的触发器

<Style TargetType={x:Type local:MyControl}>
  <Style.Triggers>
    <Trigger Property="MyProperty" Value="MyValue1">
      <Setter Property="ControlTemplate">
        <Setter.Value>
          <ControlTemplate TargetType={x:Type local:MyControl}>
            <!-- first template -->
          </ControlTemplate
        </Setter.Value>
      </Setter>
    </Trigger>
    <Trigger Property="MyProperty" Value="MyValue2">
      <Setter Property="ControlTemplate">
        <Setter.Value>
          <ControlTemplate TargetType={x:Type local:MyControl}>
            <!-- second template -->
          </ControlTemplate
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers


您可以创建一个从FramewrokElement继承的控件(或者Decorator,如果您希望快速实现,并且不关心使用类型来完成它不应该做的事情),并在设置dependency属性时创建所需控件作为控件的子控件。

您可以创建一个从FramewrokElement继承的控件(或Decorator,如果您希望快速实现,并且不关心使用类型来完成不应该执行的操作),并在设置dependency属性时创建所需控件作为控件的子控件