以下是我尽可能简化的一些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>
或者我只是以错误的方式接近这个?