ControlTemplate中的子元素

时间:2012-09-05 15:51:12

标签: wpf styles

在我们的应用程序中,所有视图都有一个“基本”布局。为了重用公共代码,我为它创建了一个BaseControl类和一个模板。

我想要实现的是从“BaseControl”派生的每个控件的公共标题和页脚栏

XAML中的具体视图:

<my:BaseControl x:Class="SampleView"
         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" 
         mc:Ignorable="d" 
         xmlns:my="clr-namespace:UserInterface" d:DesignWidth="924">
<Grid>
    //This elements are not visible - why?
</Grid>

公共基类(没有XAML但是模板)

public class BaseControl : System.Windows.Controls.UserControl{}

模板:

<Style TargetType="{x:Type my:BaseControl}" BasedOn="{StaticResource {x:Type UserControl}}">
<Setter Property="Template">
<Setter.Value>
            <ControlTemplate>
              <Grid>
                ....snip
                <Border Grid.Row="0" Name="SomeCommonUsedBorder">

                <ContentPresenter>
                  //every thing placed between
                  //<SampleView> and </SampleView> should go here
                 </ContentPresenter>

                ....snip
                //some other commonly used elements goes here
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

示例视图看起来像预期的,但是我在派生控件中编写的每个东西都不可见。

感谢您提供任何提示和想法

曼努埃尔

1 个答案:

答案 0 :(得分:0)

在发布此问题几分钟后,我找到了答案。 我必须为ControlTemplate定义TargetType。否则TargetType是Control。 Control本身没有Content属性。

<ControlTemplate TargetType="{x:Type UserControl}">