<Window.Resources> <ControlTemplate targettype="ContentControl" x:Key="Test"> <ContentPresenter TextBlock.FontSize="50" /> </ControlTemplate> </Window.Resources> <Grid> <ContentControl Template="{StaticResource Test}"> <TextBlock>Test should be rendered big</TextBlock> </ContentControl> </Grid>
如果我更改FontSize属性的值,visual studio会显示我想要的文本大小.编译或执行应用程序后,文本块的大小始终重置为其默认大小.
我还测试了各种版本的样式和嵌入式资源,但我总是处于这样的情况:我无法在包含ContentPresenter的ControlTemplate中继承附加的dp.这是设计的吗?
如果ContentControl的内容已经是WPF元素,则会在ContenPresenter中使用它之前创建它.因此,元素的逻辑父元素是ContentControl.我可以通过将ContentControl-markup更改为以下内容来检查:
<ContentControl Template="{StaticResource Test}" TextBlock.FontSize="50"> <TextBlock> This text Now is shown with a size of 50 </TextBlock> </ContentControl>
在此示例中,文本大小为50.我可以用visual studio的wpf-visualizer证明这个论证.父级是ContentControl,通过dp继承,FontSize取自父级(ContentControl),文本显示为50!
如果ContentControl仅包含文本作为内容,则可以观察到另一种行为:
<Window.Resources> <ControlTemplate x:Key="Test" targettype="{x:Type ContentControl}"> <ContentPresenter TextBlock.FontSize="50"/> </ControlTemplate> </Window.Resources> <Grid> <ContentControl Template="{StaticResource Test}"> This text is shown with a size of 50 </ContentControl> </Grid>
在此方案中,TextBox是通过ContentPresenter创建的,因为无法在可视树中输入文本.文本框没有父级,但TemplateParent属性导致ContentPresenter作为TextBoxes父级,DP系统通过ContentPresenter附加的依赖属性继承获取FontSize值.这就是为什么在这种情况下字体大小更改为50.
描述了不同的场景here.
我不明白的是,为什么VS2010在编译之前会显示FontSize 50.
原文地址:https://www.jb51.cc/javaschema/282011.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。