尝试使用用户控件来拥有多个内容

时间:2016-09-20 14:21:29

标签: c# wpf vb.net xaml

以下是我对自定义用户控件的xaml代码。我的目标是创建一个在OuterBox中显示图形的控件,但是也允许我使用InnerBox部分加载另一个要在其上显示的图形。例如,第一个/底部/外部图形可以是狗的图片。如果用户单击此选项并且答案正确,则会在狗的顶部显示复选标记图形。如果答案错误,则会出现X.这是一个非常简单的例子,但说明了这个问题。我的程序将有许多外部和内部图形组合的排列,因此在资源字典中拥有外部和内部图形选项的所有可能组合是不可行的。

我可以看到2个选项,最好是数字1。

  1. 创建控件,您可以在其中单独设置外部和内部视图框子内容。现在,我可以做其中一个,但不能两个。首先设置的内容是出现的内容。它甚至可能吗?

  2. 动态生成xaml字符串,并将内部字符串拼凑在外部字符串中,从而创建嵌套的xaml字符串。我已经验证我可以将嵌套的xaml字符串放入资源字典中的控件中,它将起作用。为此,如何通过代码将视图框子内容设置为动态创建的xaml字符串,因为无法提前存储在字典中?如果这样做,我可以拉两个xaml字符串(外部和内部图形),将它们拼接在一起,然后显示嵌套图形。

  3. 我想在VB中执行此操作,但如果需要,可以在C#中使用它。

    非常感谢任何帮助。

    我的控制定义。

    substr

1 个答案:

答案 0 :(得分:0)

我会使用网格覆盖外部图形顶部的内部图形,并控制内部图形的可见性。 Viewbox只能有一个子元素。网格可以有多个。 ZIndex较高的孩子排在最前面。

<UserControl x:Class="CardBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:TestingNested"
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">

  <Grid Width="100" Height="100">
    <Image Source="{Binding Path=OuterGraphic}"
           Panel.ZIndex="1"/>
    <Image Source="{Binding Path=InnerGraphic}" 
           Panel.ZIndex="2"
           Visibility="{Binding Path=InnerGraphicVisibility}"/>
  </Grid>
</UserControl>

在您的代码隐藏中,添加OuterGraphic,InnerGraphic和InnerGraphicVisibility依赖项属性,如下所示:

  Public Shared ReadOnly OuterGraphicProperty As DependencyProperty =
    DependencyProperty.Register("OuterGraphic", GetType(ImageSource), GetType(CardBox), New PropertyMetadata(Nothing))

  Public Property OuterGraphic As ImageSource
    Get
      Return CType(GetValue(OuterGraphicProperty), ImageSource)
    End Get
    Set(value As ImageSource)
      SetValue(OuterGraphicProperty, value)
    End Set
  End Property

然后你应该能够通过设置OuterGraphic和InnerGraphic属性动态设置图形,并通过设置InnerGraphicVisibility打开和关闭内部图形。