【发布时间】:2016-11-18 16:02:42
【问题描述】:
为了更改控件的视觉行为,有必要将整个 ControlTemplate 提取到 xaml 中并修改相应的部分。这不是问题(形成控件的属性视图,点击Template属性右侧的小方块并选择Convert to New Resource),然后像...一样编辑...
<ControlTemplate x:Key="ToggleButtonControlTemplate1" TargetType="{x:Type ToggleButton}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsDefaulted" Value="True">
<Setter Property="BorderBrush" TargetName="border"
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/>
<Setter Property="Background" TargetName="border" Value="Red"/> <!-- mod -->
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
我可以看到,在这种情况下,Border 元素已被用作根节点,并且 ContentPresenter 位于 Border Content 属性中, 但是,使用Border元素作为视觉根的背后的逻辑是什么,为什么通过设置Border的BackGround属性来管理按钮的背景颜色?
另外,哪些元素可用作根节点,继承规则是什么?标准控件的视觉结构是什么?我在哪里可以找到一些合理的文档?
我对 VisualTreeRootNode 和模板需要单个根节点有一些模糊的理解,但......只是模糊。
参考文献
有一些背景here,但没有明确的参考。
基本概念记录在 here 中,您可以深入到各个控件以查找示例。 link to Visual Tree 看起来很有希望,但它坏了。 button section 提供了一些示例,但没有提供有关该主题的任何明确参考。根据我在此处阅读的内容,我无法回答我的问题。
【问题讨论】:
标签: wpf visual-studio-2013 controltemplate