我尝试理解,为什么WPF控件或从控件自定义控件派生的内容永远不可见:
说,我们有以下内容:
<Window x:Class="WpfApplication13.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:WpfApplication13"
Title="MainWindow" Height="350" Width="525">
<DockPanel Name="dockPanel1" Background="LightBlue">
<Canvas DockPanel.Dock="Left" ToolTip="tt one" Width="200" Background="Blue">
<Control Background="Red" ToolTip="tt control" BorderBrush="Red" BorderThickness="5" Width="50" Height="100"></Control>
</Canvas>
<Button Content="two" DockPanel.Dock="Left" ToolTip="tt two" ></Button>
<!--<my:MyControl Background="Red" ToolTip="tt hello" BorderBrush="Red" BorderThickness="5"></my:MyControl>-->
<Control Background="Red" ToolTip="tt hello" BorderBrush="Red" BorderThickness="5"></Control>
</DockPanel>
</Window>
指示控件的任何存在 - 未检测到任何边框,任何工具提示,任何背景。
为什么会这样,以及如何使控件可见?
答案 0 :(得分:4)
Control
类是可以模板化的控件的基类,但它不定义模板本身。没有模板的控件没有可视化树,因此它不显示。
答案 1 :(得分:2)
我认为在XAML中对这样的控件进行声明并不意味着什么,因为它本身并不代表视觉效果。
您需要为该控件和内部控件定义模板,使用TemplateBinding绑定它们的属性。
类似的东西:
<Canvas DockPanel.Dock="Left" ToolTip="tt one" Width="200" Background="Blue">
<Control Background="Red" ToolTip="tt control" BorderBrush="Red" BorderThickness="5" Width="50" Height="100">
<Control.Template>
<ControlTemplate>
<TextBlock Text="Hello" Background="{TemplateBinding Background}"/>
</ControlTemplate>
</Control.Template>
</Control>
</Canvas>
答案 2 :(得分:0)
在您的应用程序中看不到没有Control
的{{1}},除非ControlTemplate
明确引用它们,否则设置以下属性无效:
使用这些属性的常用方法是将ControlTemplate中的元素绑定到属性。例如,如果希望控件根据Background属性的值更改颜色,则可以将ControlTemplate中元素的某些属性绑定到Background。使用TemplateBinding标记扩展将控件上的属性绑定到ControlTemplate中的元素。