可重复使用的容器/内容模板使用的控件是什么?

3
我正在创建一个容器,其样式将在整个应用程序中使用。它本质上是一个“弹出窗口”,但不会在新窗口中生成。我的应用程序的一般结构是一个导航窗口和多个页面。因此,我从我的资源字典中定义的以下模板开始:
<ControlTemplate x:Key="RainbowModalTemplate" TargetType="{x:Type Control}">        
    <Canvas Height="540" Canvas.Left="492" Canvas.Top="296" Width="945">        
        <Border x:Name="Modal" Height="540" Width="945"  Background="#ec2016" BorderBrush="White" BorderThickness="2" CornerRadius="15" Style="{DynamicResource RainbowModalBox}">
            <Border.Clip>
                <RectangleGeometry RadiusX="15" RadiusY="15" Rect="0,0,945,540"/>                   
            </Border.Clip>
                <Image Source="Resources/RainbowModal/rainbow.png" Height="247" Width="947" Margin="0,0,0,0" VerticalAlignment="Bottom" d:LayoutOverrides="Height" Stretch="UniformToFill" Canvas.Left="-2" Canvas.Top="293" ClipToBounds="True" />         
        </Border>               
    </Canvas>
</ControlTemplate>

因此,当我想要“使用”它时,我希望能够实现此控件但在其中提供自己的内容(按钮、文本等)。然而,由于我对WPF还不熟悉,不确定要使用哪个控件或控件以及如何布置此结构。下面是该对象的示例“消费者”。某人将在应用程序中单击按钮,这将设置此对象的可见性为可见:

<Control x:Name="RequestMoreInfoModal" Template="{DynamicResource RainbowModalTemplate}" Canvas.Left="494" Canvas.Top="250" Visibility="Collapsed"></Control>

我知道这可能不是最正规的做法,所以我愿意听取建议。我的具体关注点:

我知道“Control”不是正确的类型。但我不知道什么是合适的,而且似乎Canvas和其他控件不允许模板化。我应该使用哪个控件?

如何实现此模板并同时允许使用者在模板内定义自己的内容?

1个回答

2
我最终使用了控件模板和内容呈现器来实现。以下是我在资源字典中定义的可重用内容:
<ControlTemplate x:Key="RainbowModal" TargetType="ContentControl">
    <Canvas>
        <Border x:Name="Modal" Height="540" Width="945"  Background="#ec2016" BorderBrush="White" CornerRadius="15" BorderThickness="2" Style="{DynamicResource RainbowModalBox}">
            <Border.Clip>
                <RectangleGeometry  
                        RadiusX="{Binding CornerRadius.TopLeft, RelativeSource={RelativeSource AncestorType={x:Type Border}}}"
                        RadiusY="{Binding RadiusX, RelativeSource={RelativeSource Self}}" 
                        Rect="0,0,945,540"/>
            </Border.Clip>
            <Canvas>                    
                <Image Source="Resources/RainbowModal/rainbow.png" Height="247" Width="947" Margin="0,0,0,0" VerticalAlignment="Bottom" Stretch="UniformToFill" Canvas.Left="-2" Canvas.Top="293" ClipToBounds="True" />
                <ContentPresenter/>
            </Canvas>
        </Border>
    </Canvas>
</ControlTemplate>

这是该内容的“消耗”。
<ContentControl x:Name="RequestMoreInfoModal" Canvas.Left="489" Canvas.Top="122" Template="{StaticResource RainbowModal}" Visibility="Collapsed">
    <Canvas>
        <TextBlock FontSize="78" Foreground="White" Width="903" Canvas.Top="28" Canvas.Left="20" Height="298" Text="Scan your card to receive an email with more information." TextWrapping="Wrap" FontFamily="Serif72 Beta" TextAlignment="Center" />
        <Button Width="250" Height="76" Content="CLOSE" Margin="350,350" Style="{DynamicResource PurpleInfoButton}" FontSize="28" Click="Button_Click_1" ></Button>
     </Canvas>
</ContentControl>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接