我有以下代码:
<div class="box one">yes</div>
<div class="box two">yes</div>
<div class="box three">no</div>
<div class="box four">no</div>
<div class="box five">no</div>
为了减少绑定中的一些复制和粘贴,我尝试在资源字典中创建一个公共绑定作为静态资源:
<!-- Automatically apply icons to context menus based on the header value -->
<Style x:Key="DecoratedMenuItem" TargetType="MenuItem" BasedOn="{StaticResource MenuItem}">
<Style.Resources>
<clr:Double x:Key="CanvasSize">16</clr:Double>
<converters:IgnoreUnderscoresConverter x:Key="IgnoreUnderscoresConverter" />
</Style.Resources>
<Style.Triggers>
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Run" Canvas="{StaticResource appbar_control_play}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Edit" Canvas="{StaticResource appbar_edit}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Delete" Canvas="{StaticResource appbar_delete}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Install" Canvas="{StaticResource appbar_social_dropbox_download}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Uninstall" Canvas="{StaticResource appbar_delete}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Advanced" Canvas="{StaticResource appbar_tardis}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Undo" Canvas="{StaticResource appbar_undo}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Redo" Canvas="{StaticResource appbar_redo}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Exit" Canvas="{StaticResource appbar_close}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Close" Canvas="{StaticResource appbar_close}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Copy" Canvas="{StaticResource appbar_page_copy}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Cut" Canvas="{StaticResource appbar_scissor}" />
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}" Value="Paste" Canvas="{StaticResource appbar_clipboard_paste}" />
</Style.Triggers>
</Style>
但我的程序引发了以下异常: A&#39;绑定&#39;不能在资源字典中使用&#39;采集。 A&#39;绑定&#39;只能在DependencyObject的DependencyProperty上设置。
是否有一种WPF / MVVM可以减少这种膨胀(以及由于复制/粘贴而产生错误的可能性)?
答案 0 :(得分:0)
我认为最好的选择是重写IconTrigger类。它应该存储值和画布的集合,所以你可以写这样的东西:
<local:IconTrigger Binding="{Binding Header, RelativeSource={RelativeSource Self}, Converter={StaticResource IgnoreUnderscoresConverter}}" IconSize="{StaticResource CanvasSize}">
<local:IconTriggerValue Value="Run" Canvas="{StaticResource appbar_control_play}" />
<local:IconTriggerValue Value="Edit" Canvas="{StaticResource appbar_edit}" />
<local:IconTriggerValue Value="Delete" Canvas="{StaticResource appbar_delete}" />
<local:IconTriggerValue Value="Install" Canvas="{StaticResource appbar_social_dropbox_download}" />
<local:IconTriggerValue Value="Uninstall" Canvas="{StaticResource appbar_delete}" />
<local:IconTriggerValue Value="Advanced" Canvas="{StaticResource appbar_tardis}" />
<local:IconTriggerValue Value="Undo" Canvas="{StaticResource appbar_undo}" />
<local:IconTriggerValue Value="Redo" Canvas="{StaticResource appbar_redo}" />
<local:IconTriggerValue Value="Exit" Canvas="{StaticResource appbar_close}" />
<local:IconTriggerValue Value="Close" Canvas="{StaticResource appbar_close}" />
<local:IconTriggerValue Value="Copy" Canvas="{StaticResource appbar_page_copy}" />
<local:IconTriggerValue Value="Cut" Canvas="{StaticResource appbar_scissor}" />
<local:IconTriggerValue Value="Paste" Canvas="{StaticResource appbar_clipboard_paste}" />
</local:IconTrigger>