wpf - 如何在资源字典中使用引用转换器

标签 wpf c#-4.0 valueconverter

我创建了一个多重绑定(bind)转换器 (ListItemDescriptionConverter),它将几个值组合成一个字符串作为 ListBox 项的输出。但是我不知道如何让资源字典指向单独的 .cs 文件中的转换器类。当我使用以下标记时找不到它:

            <TextBlock Style="{StaticResource BasicTextStyle}">
                <TextBlock.Text>
                    <MultiBinding Converter="StaticResource {ListItemDescriptionConverter}">
                        <Binding Path="Genres"></Binding>
                        <Binding Path="Year"></Binding>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>

在资源字典中我还必须做些什么来访问转换器类吗?我无法在 Window.Resources 中添加引用因为它需要在资源字典中,所以我可以在整个应用程序中重用该样式。

最佳答案

将转换器定义为资源,例如在您的 App.xaml :

<Application x:Class="WpfApplication1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication8" 
             StartupUri="MainWindow.xaml">
   <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Skins\DefaultSkinDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <local:ListItemDescriptionConverter x:Key="ListItemDescriptionConverter" />
    </ResourceDictionary>
    </Application.Resources>
</Application>

然后您可以使用 StaticResource 引用它标记扩展和 x:Key :
<MultiBinding Converter="{StaticResource ListItemDescriptionConverter}">

另一个选项是设置 Converter使用元素语法将属性添加到转换器类的实例:
<MultiBinding>
    <MultiBinding.Converter>
        <local:ListItemDescriptionConverter />
    </MultiBinding.Converter>
</MultiBinding>

关于wpf - 如何在资源字典中使用引用转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47392431/

相关文章:

c# - 如何将渲染变换应用于鼠标位置

.net - WPF BooleanToVisibilityConverter 在 false 时转换为隐藏而不是折叠?

c# - WPF Tab 键导航

c# - 递归代替多个嵌套的 for 循环?

c# - 列表与字典(最大尺寸、元素数量)

wpf - 您的 ViewModel 是否应该将 XAML 元素作为属性公开?

WPF MVVM - 绑定(bind)仅适用于初始值

wpf - 在另一个 Scrollviewer 中使用 ScrollViewer

c# - 通过 OpenXML SDK 获取 Excel 工作表的表(工作部分)

c# - 为什么在转换为单例时我失去了分数(13.5 变成了 135)?