用Templated元素替换Base XAML元素

时间:2016-09-03 13:43:27

标签: wpf xaml

以下是我尽可能简化的一些XAML源代码

<Page.Resources>
    <DataTemplate x:Name="dTemplate" x:Key="DTemplate">
        <Grid x:Name="templateGrid" Background="Orange" >
                <TextBox x:Name ="templateBox" Background="transparent" BorderThickness="0" 
                    VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"
                    Text="Text with the template.  Text with the template.  Text with the template.  ">
                </TextBox>
        </Grid>
    </DataTemplate>
</Page.Resources>

<Grid x:Name="pageGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid x:Name="elementGrid" Grid.Row="0" Background="Orange" >
        <TextBox x:Name="elementBox" Background="transparent" BorderThickness="0"
                    VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap"
                    Text="Text without the template.  Text without the template.  Text without the template.  ">
        </TextBox>
    </Grid>
    <ContentControl x:Name="elementControl" Grid.Row="1"
                    VerticalAlignment="Center" 
                    ContentTemplate="{StaticResource DTemplate}">
    </ContentControl>
    <Grid x:Name="elementGrid2" Grid.Row="2" Background="Orange">
        <ContentControl x:Name="elementControl2"
                    VerticalAlignment="Center" 
                    ContentTemplate="{StaticResource DTemplate}">
        </ContentControl>
    </Grid>
</Grid>

pageGrid有三行,只是为了说明问题。

pageGrid的第一行是另一个Grid,elementGrid,它只包含一个TextBox; elementGrid的目的是使文本在行中居中并填充背景颜色。一切都按照应有的方式运作。

但是现在我想使用模板而不是原始控件,原因很明显。所以我创建了一个与我的原始控件完全对应的模板;这就是模板。然后我使用ContentControl实例化该模板;我把它放在pageGrid的第二行。

然而,它并没有以同样的方式工作 - 而不是一个漂亮的填充行,我在行的中心得到一个橙色的带。为了使它成为中心,我必须提出一个明确的VerticalAlignment =&#34; Center&#34;进入ContentControl,如果DataTemplate设置正确,我认为不应该这样做。

现在我可以解决它,但在某种程度上,我认为这是一个丑陋的kludge;我将ContentControl嵌入到另一个Grid中,保持VerticalAlignment = Center,并将背景颜色强制为橙色。该解决方案显示为pageGrid的第三行。

所以,我的问题是:如何修复DTemplate,以便第二行pageGrid看起来像第一行,其中elementControl只是

<ContentControl x:Name="elementControl" Grid.Row="1"
                ContentTemplate="{StaticResource DTemplate}">
</ContentControl>

或者我只是以错误的方式接近这个?

0 个答案:

没有答案