如何从静态资源

时间:2016-11-21 06:48:38

标签: wpf triggers setter controltemplate

问题

ControlTemplate的{​​{1}}中,ToggleButton触发IsChecked="True"False触发另一个触发器。

<Trigger Property="ToggleButton.IsChecked" Value="True" >
    <Setter TargetName="contentPresenter" Property="Content">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource ContentChecked}">
                <Binding Path="(ToggleButton.Content)" RelativeSource="{RelativeSource TemplatedParent}" />
                <Binding Path="(ToggleButton.IsChecked)" RelativeSource="{RelativeSource TemplatedParent}"></Binding>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</Trigger>

<Trigger Property="ToggleButton.IsChecked" Value="False">
    <Setter TargetName="contentPresenter" Property="Content">
        <Setter.Value>
            <MultiBinding Converter="{StaticResource ContentChecked}">
                <Binding Path="(ToggleButton.Content)" RelativeSource="{RelativeSource TemplatedParent}" />
                <Binding Path="(ToggleButton.IsChecked)" RelativeSource="{RelativeSource TemplatedParent}"></Binding>
            </MultiBinding>
        </Setter.Value>
    </Setter>
</Trigger>

这完美无缺,但不太干。

尝试解决方案

我希望将样板文件传递给ControlTemplate.Resources并使用 StaticResource 绑定将其添加到触发器中。像这样......

<ControlTemplate.Resources>

    <SetterBaseCollection x:Key="ContentSetter">
        <Setter TargetName="contentPresenter" Property="Content">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource ContentChecked}">
                    <Binding Path="(ToggleButton.Content)" RelativeSource="{RelativeSource TemplatedParent}" />
                    <Binding Path="(ToggleButton.IsChecked)" RelativeSource="{RelativeSource TemplatedParent}"></Binding>
                </MultiBinding>
            </Setter.Value>
        </Setter>
    </SetterBaseCollection>

</ControlTemplate.Resources>

...并引用它... ...

<Trigger Property="ToggleButton.IsChecked" Value="True"
         Setters="{StaticResource ContentSetter}" >
</Trigger>

但这失败了,因为没有&#34; Setter&#34; Setters

如何摆脱这个样板代码?

背景

我使用MultiBindingIMultiValueConverterIsChecked的当前值传递给 Converter 以决定返回的值。我传递给 Setter 的属性是内容,我将List<string>传递给转换器,转换器负责{{1} }要根据List的传递值返回的项目。

编辑 - 解决方案

根据@Ash的建议,我将MultiBinding移到模板的IsChecked元素上,并将所有触发器一起删除。

ContentPresenter.Content

0 个答案:

没有答案