c# - 编辑 wpf 控件模板但使用原始样式

标签 c# wpf xaml controltemplate

有时在编辑控件原始模板的副本时,我不需要更改原始样式和颜色,而是想直接引用原始样式和颜色。

例如,我想更改 ComboBox 模板以在下拉列表中添加一些过滤按钮,其切换按钮引用的样式也被复制到文件中。我想引用原始样式,这样我的 XAML 就不会过于困惑。

编辑: 因此,这是在您选择编辑副本时创建的 XAML 代码的一部分。 ControlTemplate 是我想要更改的,但我不需要 ComboBoxToggleButton 样式,因此对于 toggleButton,我想将其样式设置为从中复制 ComboBoxToggleButton 样式的样式。它们是否都存储在某个 namespace 中,或者它们是否不可访问?

<Style x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
     ...
</Style>

<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
    <Grid x:Name="templateRoot" SnapsToDevicePixels="true">
        ...
        <ToggleButton x:Name="toggleButton" ... Style="{StaticResource ResourceKey=ComboBoxToggleButton}"/>
     </Grid>
</ControlTemplate>

大概是我想要的样子

<Window xmlns:baseStyles="{namespace/url to the default wpf styles}">
<ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}">
    <Grid x:Name="templateRoot" SnapsToDevicePixels="true">
        ...
        <ToggleButton x:Name="toggleButton" ... Style="{StaticResource ResourceKey=baseStyles:ComboBoxToggleButton}"/>
     </Grid>
     <ControlTemplate.Triggers>
        ...
     </ControlTemplate.Triggers>
</ControlTemplate>

最佳答案

是的,所以 Combobox 不是您的基本裸模板控件。在里面是 ControlTemplate是一个唯一的 ToggleButton(因此它需要额外的特定于实例的 Style 模板)。一旦你介绍了一个新的 ControlTemplate比现在它所知道的还要多。它不能引用 Style原版里面的模板ControlTemplate因为它不是外部可用的资源。 Style 和 ControlTemplate 是不同的野兽。

您有两个选择。要么你采用那个独特的 ToggleButton 样式模板并将它放在可以作为 StaticResource 访问的地方,然后在你的 ControlTemplate 中的 ToggleButton 实例上引用它通过正常 <ToggleButton Style="{StaticResource ComboBoxUniqueToggleButtonStyleKeyNameYouGiveIt}" ..../> (就像它在资源字典中一样,除了它会一直加载,这通常是不必要的)。

或者,您可以将其直接嵌入到您的 ControlTemplate 中就像他们一样in the default style/controltemplate for ComboBox .

您可以继承 Style 的一部分模板来自 BasedOn但你只能有一个ControlTemplate一次。

希望这对您有所帮助,我将撤回我的重复投票。

关于c# - 编辑 wpf 控件模板但使用原始样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680784/

相关文章:

c# - 使用 SelectionMode Multiple/Extended 跨多个嵌套列表框获取所有选定项

c# - XAML - MediaElement 没有播放我的音乐

C# 从 URL 下载文件

c# - 文件内容搜索 C#

c# - 如何通过空对象防止MultiBinding链

c# - 在 WPF 项目中实现命令行运行

WPF 打印流程文档

c# - 在与服务线程不同的线程上运行服务操作

Javascript 验证在 C# 中不起作用(错误消息)

c# - 如何在 ViewModel 中对 OnPropertyChanged 事件处理程序进行单元测试